Submission #311463

#TimeUsernameProblemLanguageResultExecution timeMemory
311463amunduzbaevPaint By Numbers (IOI16_paint)C++14
0 / 100
1 ms256 KiB
//#include "grader.cpp"
#include "paint.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
int pref[N],suf[N];
string solve_puzzle(string s, vector<int> c) {
    int n=s.size(), k=c.size();
    for(int i=1;i<k;i++){
        pref[i]=pref[i-1]+c[i-1]+1;
    }
    suf[k-1]=n-1;
    for(int i=k-1;i>0;i--){
        suf[i-1]=suf[i]-c[i]-1;
    }
    string ans(n,'?');
    for(int i=0;i<n;i++){
        if(s[i]=='_')
            ans[i]='_';
    }

    for(int i=0;i<k;i++){
        int l,r;
        r=suf[i];
        l=pref[i];
        //cout<<l<<" "<<r<<"\n";
        vector<int>v;
        for(int j=l;j<=r;j++){
            if(ans[j]=='_'){
                v.push_back(j);
                //cout<<j<<" ";
            }
        }
        //cout<<"\n\n";
        if(v.size()){
            int left=l,right=r;
            int st=l;
            for(int q=0;q<v.size();q++){
                if(q)
                    st=v[q-1];
                int lx=v[q]-c[i]+1,rx=st+c[i]-1;
                //cout<<st<<" "<<v[q]<<"\n";
                //cout<<lx<<" "<<rx<<"\n";
                //cout<<"\n";
                left=max(left,lx);
                right=min(rx,right);

            }
            for(;left<=right;left++)
                ans[left]='X';
        }else{
            r=r-c[i]+1;
            l=l+c[i]-1;
            //cout<<l<<" "<<r<<"\n";
            for(;r<=l;r++)
                ans[r]='X';
        }
    }
    for(int i=0;i<n;i++){
        if(ans[i-1]!='X'&&ans[i+1]!='X'&&ans[i]=='?')
            ans[i]='_';
    }

    return ans;
}
/*

..._._....
1 3

..........
1 7

..........
2 3 4



*/

Compilation message (stderr)

paint.cpp: In function 'std::string solve_puzzle(std::string, std::vector<int>)':
paint.cpp:38:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |             for(int q=0;q<v.size();q++){
      |                         ~^~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...