제출 #557847

#제출 시각아이디문제언어결과실행 시간메모리
557847600MihneaBuilding 4 (JOI20_building4)C++17
0 / 100
1 ms340 KiB
#include <bits/stdc++.h> bool home = 1; using namespace std; const int N=500000+7; const int INF=(int)1e9+7; int n,a[2][2*N],take[2*N]; signed main() { #ifdef ONLINE_JUDGE home = 0; #endif home=0; if (home) { freopen("I_am_iron_man", "r", stdin); } else { ios::sync_with_stdio(0); cin.tie(0); } cin>>n; for (int it=0;it<2;it++) { for (int i=1;i<=2*n;i++) { cin>>a[it][i]; } } if (a[0][1]<a[1][1]) take[1]=0; else take[1]=1; for (int i=2;i<=2*n;i++) { int last_value=a[take[i-1]][i-1]; vector<int> pot; for (int it=0;it<2;it++) { if (last_value<=a[it][i]) { pot.push_back(it); } } if (pot.empty()) { cout<<"-1\n"; return 0; } if ((int)pot.size()==1) { take[i]=pot[0]; }else{ assert((int)pot.size()==2); if (a[0][i]<a[1][i]) take[i]=0; else take[i]=1; } } int delta=0; for (int i=1;i<=2*n;i++) { if(take[i]==0) delta++; else delta--; } int i=1; while (i<=2*n){ if (a[take[i-1]][i-1]<=a[take[i]^1][i]) { bool valid=1; int j=i; while (1) { if (j==2*n) break; j++; assert(j<=2*n); if (a[take[j-1]^1][j-1]<=a[take[j]][j]) { j--; break; } assert(a[take[j-1]^1][j-1]>a[take[j]][j]); if (a[take[j-1]^1][j-1]<=a[take[j]^1][j]) { continue; } valid=0; j--; break; } if (valid) { vector<int> deltas; int cur=0; deltas.push_back(cur); for (int k=j;k>=i;k--) { if (take[k]==0) cur--; else cur++; if (take[k]==1) cur++; else cur--; deltas.push_back(cur); } /// delta -> delta + cur int best=delta,p=0; for (int k=0;k<(int)deltas.size();k++) { if (abs(deltas[k]+delta)<abs(best)) { best=deltas[k]+delta; p=k; } } delta=best; for (int k=j-p+1;k<=j;k++) { take[k]^=1; } } i=j; } i++; } if (delta!=0) { cout<<"-1\n"; exit(0); } cout<<"YES\n"; for (int i=1;i<=2*n;i++){ cout<<(char)('A'+take[i]); } cout<<"\n"; }

컴파일 시 표준 에러 (stderr) 메시지

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