Submission #1154403

#TimeUsernameProblemLanguageResultExecution timeMemory
1154403shadow_samiPaint By Numbers (IOI16_paint)C++20
100 / 100
192 ms85184 KiB
#ifndef LOCAL #include "paint.h" #endif #include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef pair<ll,ll> pi; typedef vector<ll> vi; #define fip(a,b) for(int i = a; i<b; i++) #define fjp(a,b) for(int j = a; j<b; j++) #define fp(k,a,b) for(int k = a; k<b; k++) #define fin(a,b) for(int i = a; i>=b; i--) #define fjn(a,b) for(int j = a; j>=b; j--) #define fn(k,a,b) for(int k = a; k>=b; k--) #define fx(a) for(auto x: a) #define fy(a) for(auto y: a) #define ordered_set tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> #define test ll t;cin>>t;while(t--) #define nli "\n" void _printn(int x){cerr<<x;} void _printn(ll x){cerr<<x;} void _printn(float x){cerr<<x;} void _printn(long double x){cerr<<x<<nli;} void _printn(double x){cerr<<x<<nli;} void _printn(char x){cerr<<x<<nli;} void _printn(string x){cerr<<x<<nli;} void _printn(bool x){cerr<<x;} template<class T> void _printn(vector<T> a); template<class T> void _printn(vector<T> a){cerr<<" ("<<nli;fx(a) cerr<<x<<" "; cerr<<")"<<nli;} #ifdef LOCAL #define debug(x) cerr<<#x<<" ";_printn(x); cerr<<nli; #else #define debug(x) #endif ll n,m,res,cnt,ans,sum,tp,tp2,tptp; bool f = 0; const ll mod = 1e9 + 7; const ll mx = 2e5 + 5; bool dp[mx][105][2]; bool dp2[mx][105][2]; string na; ll pref[mx]; vi v; string solve_puzzle(std::string s, std::vector<int> c) { n = s.size(); s = "#" + s + '#'; m = c.size(); v.clear(); v.push_back(0); fx(c) v.push_back(x); v.push_back(0); fip(0,n+2){ fjp(0,m+2){ dp[i][j][0] = dp[i][j][1] = 0; dp2[i][j][0] = dp2[i][j][1] = 0; } pref[i] = 0; } fip(1,n+1) pref[i] = pref[i-1] + (s[i]=='_'); dp[0][0][0] = 1; fip(1,n+1){ fjp(0,m+1){ dp[i][j][0] = ((dp[i-1][j][0]||dp[i-1][j][1]) && s[i]!='X'); if(j==0) continue; if(i-v[j]<0) continue; tp = i-v[j]; f = ((pref[i] - pref[tp]) == 0 ); dp[i][j][1] = (dp[tp][j-1][0] && f); if(dp[i][j][1]){ debug(i); debug(j); } } // cerr<<nli; } dp2[n+1][m+1][0] = 1; fin(n,1){ fjn(m+1,1){ dp2[i][j][0] = ((dp2[i+1][j][0]||dp2[i+1][j][1]) && (s[i]!='X')); if(j==m+1) continue; if(i+v[j]>n+1) continue; tp = i + v[j] - 1; f = ((pref[tp] - pref[i-1]) == 0 ); dp2[i][j][1] = (dp2[tp+1][j+1][0] && f); if(dp2[i][j][1]){ debug(i); debug(j); } } // cerr<<nli; } fip(1,n+1){ cnt = 0; fjp(0,m+1) if(dp[i][j][0] && dp2[i][j+1][0]) cnt++; if(!cnt) s[i] = 'X'; } fip(0,n+1) pref[i] = 0; fip(1,n+1){ fjp(1,m+1){ if(i-v[j]>=0 && dp[i][j][1] && dp2[i-v[j]+1][j][1]){ tp = i; pref[i+1] += -1; pref[i-v[j]+1] += 1; debug(i); debug(j); debug(i+1); debug(i-v[j]+1); } } } string nas; fip(1,n+1){ pref[i] += pref[i-1]; if(s[i]=='.') if(pref[i]>0) s[i] = '?'; else s[i] = '_'; nas.push_back(s[i]); } return nas; } #ifdef LOCAL int main(){ ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); #ifdef LOCAL freopen("input1.txt","r",stdin); freopen("output1.txt","w",stdout); #endif mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); string ss; cin>>ss; int N; cin>>N; vector<int> c(N); fip(0,N)cin>>c[i]; cout<<solve_puzzle(ss,c)<<nli; cerr<<"Time elapsed :"<<setprecision(6)<<clock()*1000.0/CLOCKS_PER_SEC<<nli; return 0; } #endif

Compilation message (stderr)

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...