Submission #1199883

#TimeUsernameProblemLanguageResultExecution timeMemory
1199883droopyPaint By Numbers (IOI16_paint)C++20
0 / 100
0 ms320 KiB
// Jesu juva

#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ull unsigned ll
#define pii pair<int,int>
#define pll pair<ll,ll>
#define vi vector<int>
#define vll vector<ll>
#define vull vector<ull>
#define vb vector<bool>
#define vpii vector<pii>
#define vpll vector<pll>
#define vvi vector<vi>
#define vvb vector<vb>
#define vvpii vector<vpii>
#define f(i,x,n) for(int i=x;i<n;i++)
#define fe(i,x,n) for (int i=x;i<=n;i++)
#define fr(i,x,n) for(int i=x;i>n;i--)
#define fre(i,x,n) for(int i=x;i>=n;i--)
#define fll(i,x,n) for (ll i=x;i<n;i++)

string dp(string s, int idx, int c[],int k, int &sz) {
    if (idx >= s.length()) {
        return s;
    }
    
    string w="", b="";
    if (s[idx]!='X') {
        if (idx+c[sz]-c[k-1]+sz-k<s.length()) {
            char tmp=s[idx];
            s[idx]='_';
            w = dp(s,idx+1,c,k,sz);
            s[idx]=tmp;
        }
    }

    bool hitFlat=false;
    if (k <= sz && s[idx]!='_') {
        if (idx+c[k]-c[k-1]-1 < s.length()) {
            f(i,idx,idx+c[k]-c[k-1]) {
                if (s[i]!='_') s[i] = 'X';
                else {
                    //cout<<"HITFLAT"<<endl;
                    hitFlat=true;
                    break;
                }
            }

            if (!hitFlat) {
                if (idx+c[k]-c[k-1]<s.length()) {
                    if (s[idx+c[k]-c[k-1]]!='X') {
                        s[idx+c[k]-c[k-1]] = '_';
                        b=dp(s,idx+c[k]-c[k-1]+1,c,k+1,sz);
                    }
                }
                else b=dp(s,idx+c[k]-c[k-1],c,k+1,sz);
            }
        }
    }
    

    if (b.length()+w.length()==0) {
        //cout << idx<<' '<<k<<' '<<s<<' ' <<"NOTHING"<<endl<<endl;
        return "";
    }
    else {
        if (b.length()>0 && w.length()>0) {
            f(i,0,s.length()) {
                if (b[i]!=w[i]) {
                    s[i]='?';
                }
                else s[i]=b[i];
            }
            //cout << idx<<' '<<k<<' '<<s<<endl<<endl;
            return s;
        }
        else if (b.length()>0) {
            //cout << idx<<' '<<k<<' '<<b<<endl<<endl;
            return b;
        }
        else {
            //cout << idx<<' '<<k<<' '<<w<<endl<<endl;
            return w;
        }
    }
}

string solve_puzzle(string s, vi c) {
    int m=c.size();
    int x[m+1]={0};
    fe(i,1,m) {
        x[i] = x[i-1]+c[i-1];
    }

    string res =dp(s,0,x,1,m);

    if (res=="") {
        cout<<"WHADDAHELLY "<<s<<' ';
        f(i,0,m) {
            cout<<c[i]<<' ';
        }
        cout<<endl;
    }
    
    cout<<res<<endl;
}
/*
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    vi c={3};
    
    cout<< solve_puzzle(".X........",c);
    
}*/

// soli Deo gloria

Compilation message (stderr)

paint.cpp: In function 'std::string solve_puzzle(std::string, std::vector<int>)':
paint.cpp:109:1: warning: no return statement in function returning non-void [-Wreturn-type]
  109 | }
      | ^
paint.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
paint_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...