이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define forinc(i,a,b) for(int i=a;i<=b;++i)
#define fordec(i,a,b) for(int i=a;i>=b;--i)
#define fi first
#define se second
#define pii pair<int,int>
const int maxn=5e5+10;
int n,a[2*maxn],b[2*maxn];
int L[2*maxn][3],R[2*maxn][3];
vector<char> kq;
bool chq(int u,int l,int r)
{
return u>=l&&u<=r;
}
main()
{
//freopen("test.inp","r",stdin);
ios_base::sync_with_stdio(false);
cin>>n;
forinc(i,1,2*n) cin>>a[i];
forinc(i,1,2*n) cin>>b[i];
forinc(i,1,2*n+5) forinc(j,0,1) L[i][j]=INT_MAX;
forinc(i,1,2*n+5) forinc(j,0,1) R[i][j]=INT_MIN;
L[1][0]=0,L[1][1]=1;
R[1][0]=0,R[1][1]=1;
forinc(i,2,2*n) forinc(t,0,1)
{
if(t==0){
if(L[i-1][0]!=INT_MAX&&a[i]>=a[i-1]) L[i][t]=min(L[i][t],L[i-1][0]);
if(L[i-1][1]!=INT_MAX&&a[i]>=b[i-1]) L[i][t]=min(L[i][t],L[i-1][1]);
if(R[i-1][0]!=INT_MIN&&a[i]>=a[i-1]) R[i][t]=max(R[i][t],R[i-1][0]);
if(R[i-1][1]!=INT_MIN&&a[i]>=b[i-1]) R[i][t]=max(R[i][t],R[i-1][1]);
}
else{
if(L[i-1][0]!=INT_MAX&&b[i]>=a[i-1]) L[i][t]=min(L[i][t],L[i-1][0]+1);
if(L[i-1][1]!=INT_MAX&&b[i]>=b[i-1]) L[i][t]=min(L[i][t],L[i-1][1]+1);
if(R[i-1][0]!=INT_MIN&&b[i]>=a[i-1]) R[i][t]=max(R[i][t],R[i-1][0]+1);
if(R[i-1][1]!=INT_MIN&&b[i]>=b[i-1]) R[i][t]=max(R[i][t],R[i-1][1]+1);
}
}
if(!chq(n,L[2*n][0],R[2*n][0])&&!chq(n,L[2*n][1],R[2*n][1])) return cout<<-1,0;
int c=(chq(n,L[2*n][0],R[2*n][0])?0:1);
kq.push_back((char)('A'+c));
int cur=(c==0?n:n-1);
// cout<<L[5][1]<<" "<<R[5][1];
// return 0;
fordec(i,2*n-1,1)
{
bool ok=0;
if(chq(cur,L[i][0],R[i][0]))
{
int tmp=(c==0?a[i+1]:b[i+1]);
if(a[i]<=tmp)
{
// cout<<i<<" "<<1<<"\n";
kq.push_back('A');
c=0;
ok=1;
}
}
if(chq(cur,L[i][1],R[i][1])&&ok==0){
int tmp=(c==0?a[i+1]:b[i+1]);
// cout<<i;
// return 0;
if(b[i]<=tmp)
{
// cout<<i<<" "<<2<<"\n";
kq.push_back('B');
c=1;
cur--;
}
}
}
reverse(kq.begin(),kq.end());
for(auto &v:kq) cout<<v;
}
컴파일 시 표준 에러 (stderr) 메시지
building4.cpp:18:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
main()
^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |