Submission #1297853

#TimeUsernameProblemLanguageResultExecution timeMemory
1297853StefanSebezBuilding 4 (JOI20_building4)C++20
100 / 100
248 ms25948 KiB
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
#define ld long double
#define mp make_pair
const int inf=1e9;
void chmx(int &x,int y){x=max(x,y);}
void chmn(int &x,int y){x=min(x,y);}
int main(){
    int n;scanf("%i",&n);n*=2;
    int a[2][n+10];
    for(int i=0;i<=1;i++) for(int j=0;j<n;j++) scanf("%i",&a[i][j]);
    int maks[2][n+10],mn[2][n+10];
    maks[0][0]=mn[0][0]=1;
    maks[1][0]=mn[1][0]=-1;
    for(int i=1;i<n;i++){
        maks[0][i]=-inf;
        mn[0][i]=inf;
        if(a[0][i-1]<=a[0][i]) chmx(maks[0][i],maks[0][i-1]+1),chmn(mn[0][i],mn[0][i-1]+1);
        if(a[1][i-1]<=a[0][i]) chmx(maks[0][i],maks[1][i-1]+1),chmn(mn[0][i],mn[1][i-1]+1);
        maks[1][i]=-inf;
        mn[1][i]=inf;
        if(a[0][i-1]<=a[1][i]) chmx(maks[1][i],maks[0][i-1]-1),chmn(mn[1][i],mn[0][i-1]-1);
        if(a[1][i-1]<=a[1][i]) chmx(maks[1][i],maks[1][i-1]-1),chmn(mn[1][i],mn[1][i-1]-1);
    }
    int x=-1,y=n-1;
    if(mn[0][n-1]<=0&&0<=maks[0][n-1]) x=0;
    if(mn[1][n-1]<=0&&0<=maks[1][n-1]) x=1;
    if(x==-1) printf("-1\n");
    else{
        string res;
        int sum=0;
        while(y>=0){
            if(x==0) sum++;
            else sum--;
            if(x==0) res.pb('A');
            else res.pb('B');
            if(y<=0)break;
            if(a[0][y-1]<=a[x][y]&&mn[0][y-1]+sum<=0&&0<=maks[0][y-1]+sum)x=0,y--;
            else if(a[1][y-1]<=a[x][y]&&mn[1][y-1]+sum<=0&&0<=maks[1][y-1]+sum)x=1,y--;
            else break;
        }
        reverse(res.begin(),res.end());
        cout<<res<<endl;
    }
    return 0;
}

Compilation message (stderr)

building4.cpp: In function 'int main()':
building4.cpp:13:16: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   13 |     int n;scanf("%i",&n);n*=2;
      |           ~~~~~^~~~~~~~~
building4.cpp:15:53: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |     for(int i=0;i<=1;i++) for(int j=0;j<n;j++) scanf("%i",&a[i][j]);
      |                                                ~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...