Submission #967711

#TimeUsernameProblemLanguageResultExecution timeMemory
967711amine_arouaPaint By Numbers (IOI16_paint)C++17
100 / 100
352 ms183168 KiB
#pragma once #include <bits/stdc++.h> using namespace std; #define forr(i, x , y) for(int i = x ; i<=y;i++) #define fore(i , x) for(int i = 0 ; i<x;i++) #define forn(i , x ,y) for(int i = x; i>=y;i--) vector<vector<int>> pref; std::string solve_puzzle(std::string s, std::vector<int> c) { int n = (int)s.size(); int K = (int)c.size(); s = '0' + s; pref.assign(2 , vector<int>(n + 1 , 0)); forr(i , 1 , n) { pref[0][i] = pref[0][i - 1] + (s[i] == '_'); pref[1][i] = pref[1][i - 1] + (s[i] == 'X'); } vector<vector<int>> dpL(n + 3 , vector<int>(K + 3 , 0)) , dpR(n + 3 , vector<int>(K + 3 , 0)); dpL[0][0] = 1; forr(i , 1 , n) { forr(j , 0 , K) { if(j - 1 >= 0 && c[j - 1] <= i && (pref[0][i] - pref[0][i - c[j - 1]] == 0) && (i - c[j - 1] <= 0 || s[i - c[j - 1]] != 'X')) { if(i - c[j - 1] == 0) { if(j == 1) dpL[i][j]|=1; } else { dpL[i][j]|=dpL[i - c[j - 1] - 1][j - 1]; } } if(s[i] != 'X') dpL[i][j]|=dpL[i - 1][j]; } } dpR[n + 1][K] = 1; dpR[n + 2][K] = 1; forn(i , n , 1) { forr(j , 0 , K) { if(j < K && c[j] <= n - i + 1 && pref[0][i + c[j] - 1] - pref[0][i - 1] == 0 && (i + c[j] > n || s[i + c[j]] != 'X')) { if(i + c[j] == n + 1) { if(j == K - 1) dpR[i][j]=1; } else dpR[i][j]|=dpR[i + c[j] + 1][j + 1]; } if(s[i] != 'X') dpR[i][j]|=dpR[i + 1][j]; } } vector<int> can_black(n +5 , 0); vector<int> val(n + 1 , 0); forr(i , 1 , n) { int cur = 0; forr(k , 0 , K) { if((dpL[i - 1][k] && dpR[i + 1][k])&& s[i] != 'X') cur = 1; } if(cur == 1) val[i]|=1; } forr(i , 1 , n) { forr(k , 0 , K - 1) { if((i==1?(k==0):(dpL[i-2][k]&&s[i-1]!='X'))&&i+c[k]-1<=n&&dpR[i+c[k]+1][k+1]&&pref[0][i+c[k]-1]-pref[0][i-1]==0&&(i+c[k]>n||s[i+c[k]]!='X')) { if(i + c[k] > n) { if(k + 1 == K) { can_black[i]++; can_black[i + c[k]]--; } } else { can_black[i]++; can_black[i + c[k]]--; } } } } forr(i , 1 , n) { can_black[i]+=can_black[i - 1]; if(can_black[i]) val[i]|=2; } string ans = ""; forr(i , 1 ,n) { if(val[i] == 1) ans+='_'; else if(val[i] == 2) ans+= 'X'; else ans+='?'; } return ans; }

Compilation message (stderr)

paint.cpp: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...