Submission #1318897

#TimeUsernameProblemLanguageResultExecution timeMemory
1318897ezzzayHandcrafted Gift (IOI20_gift)C++20
100 / 100
418 ms40504 KiB
#include "gift.h"
#include<bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define pb push_back
int construct(int n, int r, std::vector<int> a, std::vector<int> b, std::vector<int> x){
    vector<int> ps(n+5,0);
    for(int i=0;i<r;i++){
        if(x[i]==1){
            ps[a[i]]++;
            ps[b[i]]--;
        }
    }
    for(int i=1;i<=n-1;i++) ps[i]+=ps[i-1];
    set<int> st;
    for(int i=0;i<=n-2;i++){
        if(ps[i]==0) st.insert(i);
    }
    for(int i=0;i<r;i++){
        if(x[i]==2 && a[i]==b[i]) return 0;
    }
    vector<int> ed(max(0,n-1),0);
    for(int i=0;i<r;i++){
        if(x[i]==2){
            int L=a[i], R=b[i]-1;
            auto it = st.lower_bound(L);
            if(it==st.end() || *it>R) return 0;
            ed[*it]=1;
        }
    }
    string s;
    char c='B';
    if(n>0) s+=c;
    for(int i=0;i<=n-2;i++){
        if(ed[i]) c = (c=='B' ? 'R' : 'B');
        s+=c;
    }
    for(int i=0;i<n+5;i++) ps[i]=0;
    for(int i=0;i<n;i++) ps[i+1]=ps[i]+(s[i]=='R');
    for(int i=0;i<r;i++){
        int r = ps[b[i]+1]-ps[a[i]];
        int len = b[i]-a[i]+1;
        if(x[i]==1){
            if(!(r==len || r==0)) return 0;
        } else {
            if(r==len || r==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...