| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1354364 | kokokai | Building 4 (JOI20_building4) | C++20 | 140 ms | 28928 KiB |
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define fi first
#define se second
#define task "text"
const int N = 1e6+5;
int dpmin[N][2],dpmax[N][2];
int a[N][2];
int n;
int main(){
ios::sync_with_stdio(false);cin.tie(nullptr);
if(fopen(task".inp","r")){
freopen(task".inp","r",stdin);
}
cin>>n;
for(int i=1;i<=n+n;i++) cin>>a[i][0];
for(int i=1;i<=n+n;i++) cin>>a[i][1];
for(int i=1;i<=n+n;i++){
dpmin[i][0]=dpmin[i][1]=1e9;
dpmax[i][0]=dpmax[i][1]=-1e9;
}
dpmin[0][0]=dpmax[0][1]=0;
for(int i=1;i<=n+n;i++){
for(int c1=0;c1<2;c1++){
for(int c2=0;c2<2;c2++){
if(a[i][c1] >= a[i-1][c2]){
dpmin[i][c1]=min(dpmin[i][c1],dpmin[i-1][c2]+(c1 == 0));
dpmax[i][c1]=max(dpmax[i][c1],dpmax[i-1][c2]+(c1 == 0));
}
}
}
}
bool ok=0;
for(int c=0;c<2;c++){
if(dpmin[n+n][c] <= n && n <= dpmax[n+n][c]) ok=1;
}
if(!ok){
cout<<-1<<'\n';
return 0;
}
int na=0;
vector<int> ans;
int num=1e9;
for(int i=n+n;i>=1;i--){
bool has=0;
for(int c=0;c<2;c++){
if(has) break;
int ra=n-na;
if(dpmin[i][c] <= ra && ra <= dpmax[i][c] && a[i][c] <= num){
num=a[i][c];
ans.push_back(c);
has=1;
na += (c == 0);
}
}
}
reverse(ans.begin(),ans.end());
for(int c:ans){
if(c==0) cout<<'A';
else cout<<'B';
}
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
