Submission #219039

#TimeUsernameProblemLanguageResultExecution timeMemory
219039NightlightBuilding 4 (JOI20_building4)C++14
100 / 100
454 ms105928 KiB
#include <cstdio> #include <stdlib.h> #include <utility> #include <algorithm> #define mn first #define mx second using namespace std; int N; int A[1000005][2]; bool vis[1000005][2]; pair<int, int> dp[1000005][2]; void DFS(int u, int i) { if(vis[u][i]) return; vis[u][i] = 1; int mn = 2000000000, mx = -2000000000; if(A[u][i] <= A[u + 1][0]) { DFS(u + 1, 0); mn = min(dp[u + 1][0].mn + 1, mn); mx = max(dp[u + 1][0].mx + 1, mx); } if(A[u][i] <= A[u + 1][1]) { DFS(u + 1, 1); mn = min(dp[u + 1][1].mn, mn); mx = max(dp[u + 1][1].mx, mx); } dp[u][i] = make_pair(mn, mx); } void backtrack() { if(dp[0][0] == make_pair(2000000000, -2000000000) || dp[0][0].mn > N >> 1 || dp[0][0].mx < N >> 1) { puts("-1"); exit(0); } int last = 0, cur = N >> 1; for(int i = 0; i < N; i++) { if(A[i][last] <= A[i + 1][0] && dp[i + 1][0].mn <= cur - 1 && cur - 1 <= dp[i + 1][0].mx) { last = 0; cur--; putchar('A'); continue; } last = 1; putchar('B'); } } int main() { scanf("%d", &N); N <<= 1; for(int i = 1; i <= N; i++) { scanf("%d", &A[i][0]); } for(int i = 1; i <= N; i++) { scanf("%d", &A[i][1]); } vis[N][0] = 1, vis[N][1] = 1; dp[N][0] = make_pair(0, 0), dp[N][1] = make_pair(0, 0); DFS(0, 0); backtrack(); }

Compilation message (stderr)

building4.cpp: In function 'int main()':
building4.cpp:49:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &N);
   ~~~~~^~~~~~~~~~
building4.cpp:52:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &A[i][0]);
     ~~~~~^~~~~~~~~~~~~~~~
building4.cpp:55:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &A[i][1]);
     ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...