Submission #1208223

#TimeUsernameProblemLanguageResultExecution timeMemory
1208223ansoriPaint By Numbers (IOI16_paint)C++20
100 / 100
143 ms81880 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; const int N = 2e5 + 2 , M = 102; bool dp[N][M][2] , pd[N][M][2]; std::string solve_puzzle(std::string s, std::vector<int> c) { int n = s.size() , m = c.size() , lst = 0; dp[0][0][0] = 1; dp[0][0][1] = 0; for(int i = 1;i <= n; ++ i){ dp[i][0][0] = (dp[i - 1][0][0] & (s[i - 1] != 'X')); dp[i][0][1] = 0; if(s[i - 1] == '_') lst = i; for(int j = 1;j <= m; ++ j){ if(s[i - 1] != 'X'){ dp[i][j][0] = (dp[i - 1][j][0] | dp[i - 1][j][1]); } if(s[i - 1] != '_'){ if(i - c[j - 1] >= lst) dp[i][j][1] = dp[i - c[j - 1]][j - 1][0]; } // cout << dp[i][j][0] << ' ' << dp[i][j][1] << ' '; } // cout << '\n'; } reverse(c.begin() , c.end()); lst = n + 1; pd[n + 1][0][0] = 1; pd[n + 1][0][1] = 0; for(int i = n;i >= 1; -- i){ pd[i][0][0] = (pd[i + 1][0][0] & (s[i - 1] != 'X')); pd[i][0][1] = 0; if(s[i - 1] == '_') lst = i; for(int j = 1;j <= m; ++ j){ if(s[i - 1] != 'X'){ pd[i][j][0] = (pd[i + 1][j][0] | pd[i + 1][j][1]); } if(s[i - 1] != '_'){ if(i + c[j - 1] <= lst) pd[i][j][1] = pd[i + c[j - 1]][j - 1][0]; } } } reverse(c.begin() , c.end()); string ans = s; vector<bool> okw(n , 0) , okb(n , 0); for(int i = 0;i < n; ++ i){ for(int j = 0;j <= m; ++ j){ okw[i] = (okw[i] | ((dp[i][j][1] | dp[i][j][0]) & (pd[i + 2][m - j][1] | pd[i + 2][m - j][0]))); } } vector<int> d(n , 0); vector<int> ps = {n * 3}; for(int i = n - 1;i >= 0; -- i) if(s[i] == '_') ps.push_back(i); for(int i = 0;i < n; ++ i){ for(int j = 0;j < m; ++ j){ if(i + c[j] + 1 > n + 1) continue ; if(dp[i][j][0] and pd[i + c[j] + 1][m - j - 1][0] and i + c[j] - 1 < ps.back()){ d[i] ++; d[i + c[j]] --; //cout << i << ' ' << c[j] << ' '; } } if(s[i] == '_') ps.pop_back(); } int sm = 0; for(int i = 0;i < n; ++ i){ sm += d[i]; if(sm > 0) okb[i] = true; } for(int i = 0;i < n; ++ i){ if(s[i] != '.') continue ; if(okw[i] and okb[i]) ans[i] = '?'; else if(okw[i]) ans[i] = '_'; else ans[i] = 'X'; } return ans; }

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