Submission #361231

#TimeUsernameProblemLanguageResultExecution timeMemory
361231Sparky_09Paint By Numbers (IOI16_paint)C++17
32 / 100
1 ms384 KiB
#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<ll, ll> pii;
typedef vector<ll> vi;
typedef vector<pii> vpi;

void usaco(string s){
  freopen((s+".in").c_str(), "r", stdin);
  freopen((s+".out").c_str(), "w", stdout);
}

const int N = 2e5+5;
int pref[N],rpref[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;
    }
    rpref[k-1] = n-1;
    for(int i = k-1; i>0; i--){
        rpref[i-1] = rpref[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=rpref[i];
        l=pref[i];
        vector<int>v;
        for(int j=l;j<=r;j++){
            if(ans[j]=='_'){
                v.push_back(j);
            }
        }
        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;
                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;
            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;
}

Compilation message (stderr)

paint.cpp: In function 'std::string solve_puzzle(std::string, std::vector<int>)':
paint.cpp:47:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |             for(int q=0;q<v.size();q++){
      |                         ~^~~~~~~~~
paint.cpp: In function 'void usaco(std::string)':
paint.cpp:12:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   12 |   freopen((s+".in").c_str(), "r", stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
paint.cpp:13:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   13 |   freopen((s+".out").c_str(), "w", stdout);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...