Submission #61038

#TimeUsernameProblemLanguageResultExecution timeMemory
61038TenuunPaint By Numbers (IOI16_paint)C++17
100 / 100
1677 ms66676 KiB
#include "paint.h" #include<bits/stdc++.h> using namespace std; int b[200001], w[200001], x[200003], y[200003]; bool vis[200001][101]={false}, dp[200001][101]={false}; string s; int n; vector<int>c; void pre(){ memset(x, 0, sizeof x); memset(y, 0, sizeof y); b[0]=w[0]=0; if(s[0]=='_') w[0]++; else if(s[0]=='X') b[0]++; for(int i=1; i<=s.length(); i++){ b[i]=b[i-1]; w[i]=w[i-1]; if(s[i]=='_') w[i]++; else if(s[i]=='X') b[i]++; } } bool solve(int u, int ind){ if(ind==n){ if(u==0){ if(b[s.length()-1]==0){ y[u]++; return true; } else return false; } if(b[s.length()-1]-b[u-1]==0){ y[u]++; return true; } return false; } if(u>=s.length() && ind<n) return false; if(vis[u][ind]) return dp[u][ind]; vis[u][ind]=true; int t=c[ind]; if(u==0){ if(u+t-1<s.length() && w[u+t-1]==0 && s[u+t]!='X'){ if(solve(u+t+1, ind+1)==true){ x[u]++; x[u+t]--; y[u+t]++; y[u+t+1]--; dp[u][ind]=true; } } } else{ if(u+t-1<s.length() && w[u+t-1]-w[u-1]==0 && s[u+t]!='X'){ if(solve(u+t+1, ind+1)==true){ x[u]++; x[u+t]--; y[u+t]++; y[u+t+1]--; dp[u][ind]=true; } } } if(s[u]!='X' && solve(u+1, ind)==true){ y[u]++; y[u+1]--; dp[u][ind]=true; } return dp[u][ind]; } string solve_puzzle(std::string ss, std::vector<int> c) { s=ss; ::c=c; n=c.size(); pre(); solve(0, 0); for(int i=1; i<ss.length(); i++){ x[i]=x[i]+x[i-1]; y[i]=y[i]+y[i-1]; } string res; for(int i=0; i<ss.length(); i++){ if(x[i] && y[i]) res+='?'; else if(x[i]) res+='X'; else res+='_'; } return res; }

Compilation message (stderr)

paint.cpp: In function 'void pre()':
paint.cpp:17:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=1; i<=s.length(); i++){
                  ~^~~~~~~~~~~~
paint.cpp: In function 'bool solve(int, int)':
paint.cpp:40:6: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if(u>=s.length() && ind<n) return false;
     ~^~~~~~~~~~~~
paint.cpp:45:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(u+t-1<s.length() && w[u+t-1]==0 && s[u+t]!='X'){
      ~~~~~^~~~~~~~~~~
paint.cpp:56:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(u+t-1<s.length() && w[u+t-1]-w[u-1]==0 && s[u+t]!='X'){
      ~~~~~^~~~~~~~~~~
paint.cpp: In function 'std::__cxx11::string solve_puzzle(std::__cxx11::string, std::vector<int>)':
paint.cpp:80:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=1; i<ss.length(); i++){
                  ~^~~~~~~~~~~~
paint.cpp:85:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0; i<ss.length(); i++){
                  ~^~~~~~~~~~~~
#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...