# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
216273 | dantoh000 | 건물 4 (JOI20_building4) | C++14 | 495 ms | 78712 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int N = 500005;
const int INF = 1000000000;
typedef pair<int,int> ii;
int n;
int a[2*N][2];
int p[2*N][2];
int q[2*N][2];
ii P[2*N][2];
ii Q[2*N][2];
int ans[2*N];
bool test(){
for (int i = 1; i <= 2*n; i++){
for (int j = 0; j < 2; j++){
p[i][j] = INF;
if (a[i][j] >= a[i-1][0]){
if (p[i-1][0] < p[i][j]){
p[i][j] = p[i-1][0];
P[i][j] = {i-1,0};
}
}
if (a[i][j] >= a[i-1][1]){
if (p[i-1][1] < p[i][j]){
p[i][j] = p[i-1][1];
P[i][j] = {i-1,1};
}
}
}
p[i][1]++;
}
for (int i = 2*n; i >= 1; i--){
for (int j = 0; j < 2; j++){
q[i][j] = INF;
if (i == 2*n || a[i][j] <= a[i+1][0]){
if (q[i+1][0] < q[i][j]){
q[i][j] = q[i+1][0];
Q[i][j] = {i+1,0};
}
}
if (i == 2*n || a[i][j] <= a[i+1][1]){
if (q[i+1][1] < q[i][j]){
q[i][j] = q[i+1][1];
Q[i][j] = {i+1,1};
}
}
}
q[i][0]++;
}
for (int i = 1; i <= 2*n; i++){
for (int j = 0; j < 2; j++){
if (p[i][j] >= INF || q[i][j] >= INF) continue;
int num = p[i][j] + (2*n - i + 1) - q[i][j] - (j == 1);
//printf("%d %d -> %d\n",i,j,num);
if (num == n){
//printf("FOUND!");
ii cur = {i,j};
while (cur.first >= 1){
ans[cur.first] = cur.second;
cur = P[cur.first][cur.second];
}
cur = Q[i][j];
while (cur.first <= 2*n){
ans[cur.first] = cur.second;
cur = Q[cur.first][cur.second];
}
return true;
}
}
}
return false;
}
int main(){
scanf("%d",&n);
for (int i = 1; i <= 2*n; i++){
scanf("%d",&a[i][0]);
}
for (int i = 1; i <= 2*n; i++){
scanf("%d",&a[i][1]);
}
if (test()){
for (int i = 1; i <= 2*n; i++){
printf("%c",ans[i]?'B':'A');
}
return 0;
}
for (int i = 1; i <= 2*n; i++){
a[i][0] ^= a[i][1];
a[i][1] ^= a[i][0];
a[i][0] ^= a[i][1];
}
if (test()){
for (int i = 1; i <= 2*n; i++){
printf("%c",ans[i]?'A':'B');
}
return 0;
}
printf("-1\n");
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |