Submission #1259782

#TimeUsernameProblemLanguageResultExecution timeMemory
1259782son2008Building 4 (JOI20_building4)C++20
100 / 100
148 ms28952 KiB
#include <bits/stdc++.h> using namespace std; #define ii pair<int, int> #define fi first #define se second // #define int long long #define ll long long #define ld double #define mp make_pair #define lg2 30 #define iii pair<int, ii> #define iiii pair<ii, ii> #define base 29 #define eps 1e-8 #define MASK(i) (1LL << (i)) #define BIT(S, i) (((S) >> (i)) & 1) int dx[] = {0LL, 0LL, 1, -1, 1, 1, -1, -1}; int dy[] = {1, -1, 0LL, 0LL, 1, -1, 1, -1}; const int maxn = 1e6 + 5, inf = 1e9; const int mod = 1e9 + 7; ii dp[maxn][2]; int a[maxn][2], n; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define task "task" if (fopen(task ".inp", "r")) { freopen(task ".inp", "r", stdin); freopen(task ".out", "w", stdout); } cin >> n; for (int j = 0; j < 2; j++) { for (int i = 1; i <= 2 * n; i++) { cin >> a[i][j]; } } a[0][0] = a[0][1] = -inf; for (int i = 1; i <= 2 * n; i++) { dp[i][0] = dp[i][1] = mp(inf, -inf); for (int trc = 0; trc <= 1; trc++) { for (int cur = 0; cur <= 1; cur++) { if (a[i - 1][trc] <= a[i][cur]) { // cout << i << " " << trc << " " << cur << '\n'; dp[i][cur].fi = min(dp[i][cur].fi, dp[i - 1][trc].fi + (1 - cur)); dp[i][cur].se = max(dp[i][cur].se, dp[i - 1][trc].se + (1 - cur)); } } } } int ok = -1; for (int tt = 0; tt <= 1; tt++) { if (dp[2 * n][tt].fi <= n && dp[2 * n][tt].se >= n) { ok = tt; break; } } if (ok == -1) { cout << -1; return 0; } vector<int> vec; int cnt = n; for (int i = 2 * n; i >= 1; i--) { int x = (ok ? a[i][1] : a[i][0]); vec.push_back(ok); cnt -= (1 - ok); // cout << cnt << " " << x << '\n'; if (a[i - 1][1] <= x && dp[i - 1][1].fi <= cnt && dp[i - 1][1].se >= cnt) ok = 1; else ok = 0; } reverse(vec.begin(), vec.end()); for (int x : vec) { cout << (x ? 'B' : 'A'); } cerr << endl << "TIME : " << clock() * 0.001 << "s" << endl; }

Compilation message (stderr)

building4.cpp: In function 'int main()':
building4.cpp:31:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   31 |         freopen(task ".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
building4.cpp:32:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   32 |         freopen(task ".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...