Submission #242437

#TimeUsernameProblemLanguageResultExecution timeMemory
242437Coroian_DavidPaint By Numbers (IOI16_paint)C++11
100 / 100
314 ms84020 KiB
#include <bits/stdc++.h> //#include "paint.h" #define MAX_N 200000 #define MAX_K 100 using namespace std; string x; int n, k; string rez; int v[MAX_K + 1]; int dp[MAX_N + 2 + 1][MAX_K + 1]; int pos[MAX_N + 2 + 1][2]; int b[MAX_N + 1]; int w[MAX_N + 1]; void getSum() { for(int i = 1; i <= n; i ++) { b[i] = b[i - 1] + (x[i] == 'X'); w[i] = w[i - 1] + (x[i] == '_'); } } void getDp() { dp[1][0] = 1; for(int i = 1; i <= n; i ++) { for(int j = 0; j <= k; j ++) { if(dp[i][j] == 1) { //cout << "SUNTEM " << i << " POS " << j << "\n"; if(x[i] != 'X') dp[i + 1][j] = 1;//white if(j < k) { int urm = i + v[j + 1] - 1; int y = w[urm] - w[i - 1]; if(y == 0) { if(urm == n || (urm < n && x[urm + 1] != 'X')) dp[urm + 2][j + 1] = 1; } } } } } } void getPos() { dp[n + 1][k] <<= 1; dp[n + 2][k] <<= 1; for(int i = n; i >= 1; i --) { for(int j = 0; j <= k; j ++) { if(dp[i][j] == 1) { if(x[i] != 'X' && dp[i + 1][j] == 2) { dp[i][j] = 2;//white pos[i][0] = 1; //cout << " " << i << " POATE FI ALB \n"; } if(j < k) { int urm = i + v[j + 1] - 1; int y = w[urm] - w[i - 1]; if(y == 0) { if(urm == n || (urm < n && x[urm + 1] != 'X')) if(dp[urm + 2][j + 1] == 2) { dp[i][j] = 2; pos[i][1] ++; pos[urm + 1][1] --; pos[urm + 1][0] = 1; //cout << " DE LA " << i << " LA " << urm << " NEGRU \n"; } } } } } } } void getRez() { rez.resize(n); for(int i = 1; i <= n; i ++) { pos[i][1] += pos[i - 1][1]; if(pos[i][0] != 0 && pos[i][1] != 0) rez[i - 1] = '?'; else if(pos[i][0] != 0) rez[i - 1] = '_'; else rez[i - 1] = 'X'; } } string solve_puzzle(string s, vector<int> c) { n = s.size(); k = c.size(); s = " " + s; x = s; for(int i = 0; i < k; i ++) v[i + 1] = c[i]; getSum(); getDp(); getPos(); getRez(); return rez; }
#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...