제출 #1354364

#제출 시각아이디문제언어결과실행 시간메모리
1354364kokokaiBuilding 4 (JOI20_building4)C++20
100 / 100
140 ms28928 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) 메시지

building4.cpp: In function 'int main()':
building4.cpp:14:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   14 |         freopen(task".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...