# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
557848 | 600Mihnea | Building 4 (JOI20_building4) | C++17 | 341 ms | 35832 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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);
}
for (int i=1;i<=2*n;i++){
cout<<(char)('A'+take[i]);
}
cout<<"\n";
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |