제출 #1242058

#제출 시각아이디문제언어결과실행 시간메모리
1242058hiikunZHandcrafted Gift (IOI20_gift)C++20
100 / 100
86 ms18948 KiB
#include "gift.h"
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int construct(int n,int r,std::vector<int> a,std::vector<int> b,std::vector<int> x) {
    vector<int> memo(n,-1),aka(n+1,0),ao(n+1,0);
    string S;
    for(ll i = 0;i < r;i++){
        if(x[i] == 1 && a[i] != b[i]){
            memo[a[i]] = max(memo[a[i]],b[i]);
        }
    }
    int sibari = -1;
    for(ll i = 0;i < n;i++){
       
        if(i == 0) S += 'R';
        else if(i <= sibari) S += S.back();
        else S += ('R' + 'B' - S.back());
        aka[i + 1] = aka[i] + (S.back() == 'R');
        ao[i + 1] = ao[i] + (S.back() == 'B');
        sibari = max(sibari,memo[i]);
    }
    for(ll i = 0;i < r;i++){
        if(x[i] == 1){
            if(aka[b[i] + 1] - aka[a[i]] != 0 && ao[b[i] + 1] - ao[a[i]] != 0) return 0;
        }
        else{
            if(aka[b[i] + 1] - aka[a[i]] == 0 || ao[b[i] + 1] - ao[a[i]] == 0) return 0;
        }
    }
    
    craft(S);
    return 1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...