| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 1244991 | matisito | Paint By Numbers (IOI16_paint) | C++20 | 0 ms | 328 KiB | 
#include "paint.h"
#include <iostream>
#include <iomanip>
#include <string>
#include <math.h>
#include <algorithm>
#include <cstring>
#include <numeric>
#include <vector>
#include <bitset>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <cassert>
#include <cstdlib>
using namespace std;
#define dbg(x) cerr<<#x<<": "<<x<<"\n";
/*  
I love VN uwu
*/
string solve_puzzle(string s, vector<int> c){
    int n=(int)c.size();
    vector<int>pref;
    pref.push_back(0);
    for(char ch:s){
        if(ch=='.') pref.push_back(pref.back()+1);
        else pref.push_back(pref.back());
    }
    vector<int>start(n), end(n);
    // dbg((int)pref.size());
    int l=0, r;
    for(int i=0 ; i<n ; i++){
        // dbg(i)
        for(int j=l ; j<(int)s.size() ; j++){
            r=j+c[i]-1;
            // dbg(pref[r+1])
            // dbg(pref[j])
            if(pref[r+1]-pref[j]==r-j+1){
                start[i]=j;
                l=r+2;
                break;
            }
        }
    }
    r=(int)s.size()-1;
    for(int i=n-1 ; i>=0 ; i--){
        for(int j=r ; j>=0 ; j--){
            l=j-c[i]+1;
            if(pref[j+1]-pref[l]==j-l+1){
                end[i]=l;
                r=l-2;
                break;
            }
        }
    }
    vector<int>auxi((int)s.size());
    int maxi=0, valenotta=0;
    for(int i=0 ; i<n ; i++){
        // dbg(start[i])
        // dbg(end[i])
        for(int j=start[i] ; j<=end[i] ; j++){
            l=j; r=j+c[i]-1;
            if(pref[r+1]-pref[j]<r-l+1) continue;
            valenotta++;
            for(int k=0 ; k<(int)s.size() ; k++){
                if(k>=l && k<=r){
                    auxi[k]++;
                }
                // else auxi[k].insert('_');
            }
        }
        maxi=max(maxi, valenotta);
        valenotta=0;
    }
    // for(int x:auxi) dbg(x)
    string ans;
    for(int i=0 ; i<(int)s.size() ; i++){
        if(auxi[i]==maxi) ans+='X';
        else if(auxi[i]==0) ans+='_';
        else ans+='?';
    }
    return ans;
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
