Submission #59004

#TimeUsernameProblemLanguageResultExecution timeMemory
59004tugushkaPaint By Numbers (IOI16_paint)C++14
100 / 100
1371 ms183684 KiB
#include "paint.h" #include<bits/stdc++.h> #define si( x ) scanf("%d", &x) #define sll( x ) scanf("%lld", &x) #define mp make_pair #define pb push_back #define N 200001 using namespace std; typedef pair < int , int > pii; vector < int > v; string a; int n, K; int dp[N][101][2]; int cntb[N]; int b[N]; bool w[N]; int calc( int l, int r ){ return cntb[r] - cntb[l-1]; } bool rec( int now, int k, bool c ){ if( now == 0 && k == -1 ) return 1; if( now < 0 ) return 0; if( dp[now][k][c] != -1 ) return dp[now][k][c]; bool f = 0; if( (a[now] == '_' || a[now] == '.' ) && rec(now-1, k, 0) ) w[now] = f = 1; if( !c && k != -1 ){ bool tmp = 0; if( calc( now-v[k]+1 , now ) == 0 ) tmp |= rec( now-v[k], k-1, 1 ); if( tmp ){ f = 1, b[now-v[k]+1] = max( b[now-v[k]+1], v[k] ); } } return dp[now][k][c] = f; } string solve_puzzle( string s, vector < int > c){ a = " " + s; v = c; n = s.size(); K = c.size(); memset( dp, -1, sizeof(dp) ); for(int i = 1 ; i <= n ; i++) cntb[i] = cntb[i-1] + (a[i] == '_'); rec( n, K-1, 0 ); int cnt = 0; for(int i = 1 ; i <= n ; i++){ cnt = max( cnt, b[i] ); int d = 0; if( cnt ) d += 1; if( w[i] ) d += 2; if( d == 1 ) s[i-1] = 'X'; if( d == 2 ) s[i-1] = '_'; if( d == 3 ) s[i-1] = '?'; cnt--; } return s; } /* int main(){ cin >> a >> K; vector < int > _v(K); for(int i = 0 ; i < K ; i++) si(_v[i]); cout << solve_puzzle( a, _v ) << endl; } */

Compilation message (stderr)

paint.cpp: In function 'bool rec(int, int, bool)':
paint.cpp:41:23: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
  return dp[now][k][c] = f;
         ~~~~~~~~~~~~~~^~~
#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...