Submission #65317

#TimeUsernameProblemLanguageResultExecution timeMemory
65317zubecPaint By Numbers (IOI16_paint)C++14
100 / 100
752 ms403536 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; int dp[110][200100], n, k, pref[200100], ptrL[110], ptrR[110], pref2[200100]; int good[110][200100]; int sum[110][200100]; int can1[200100], can2[200100]; pair<int, int> prs[110][200100]; vector <int> vec[110]; std::string solve_puzzle(std::string s, std::vector<int> c) { s += '_'; s += 'X'; c.push_back(1); n = s.size(); s = '.' + s; k = c.size(); for (int i = 1; i <= n; i++){ pref[i] = pref[i-1]; pref2[i] = pref2[i-1]; if (s[i] == '_') ++pref[i]; if (s[i] == 'X') ++pref2[i]; } bool bb = 0; for (int i = 0; i <= n; i++){ if (s[i] == 'X') bb = 1; if (bb == 1) break; vec[0].push_back(i); } for (int j = 1; j <= k; j++){ int sz = c[j-1]; for (int i = sz; i <= n; i++){ if (j == k && i != n) continue; if (pref[i]-pref[i-sz] > 0) continue; while(ptrR[j-1] + 1 < vec[j-1].size() && vec[j-1][ptrR[j-1]+1] < i - sz + (j == 1)) ++ptrR[j-1]; while(ptrL[j-1] < vec[j-1].size() && pref2[i-sz]-pref2[max(0, vec[j-1][ptrL[j-1]])] > 0) ++ptrL[j-1]; //cout << j << ' ' << i << ' ' << ptrL[j-1] << ' ' << ptrR[j-1] << ' ' << vec[j-1][ptrL[j-1]] << endl; if (ptrR[j-1] < vec[j-1].size() && ptrL[j-1] <= ptrR[j-1] && vec[j-1][ptrL[j-1]] < i - sz + (j == 1)){ dp[j][i] = 1; vec[j].push_back(i); prs[j][vec[j].size()-1] = {ptrL[j-1], ptrR[j-1]}; } } } sum[k][0] = 1; for (int j = k; j >= 1; j--){ int curSum = 0; for (int i = 0; i < vec[j].size(); i++){ //break; curSum += sum[j][i]; if (curSum > 0){ int l = prs[j][i].first, r = prs[j][i].second; //cout << j << ' ' << l << ' ' << r << ' ' << vec[j][i] << ' ' << vec[j][i]-c[j-1]+1 << ' ' << vec[j][i] << endl; ++sum[j-1][l]; --sum[j-1][r+1]; ++can1[vec[j][i]-c[j-1]+1]; --can1[vec[j][i]+1]; int sz2; if (j > 1) sz2 = c[j-2]; else sz2 = 1; /*int lSpace = vec[j-1][l]-sz2+1, rSpace = vec[j-1][r]-sz2+1; cout << lSpace << ' ' << rSpace << ' '; ++can2[lSpace]; --can2[rSpace];*/ int lSpace = vec[j-1][l]+1, rSpace = vec[j][i]-c[j-1]+1; //cout << lSpace << ' ' << rSpace << endl; ++can2[lSpace]; --can2[rSpace]; } } } int sum1 = 0, sum2 = 0; string anss; for (int i = 1; i <= n-2; i++){ sum1 += can1[i]; sum2 += can2[i]; //cout << i << ' ' << "kek " << sum1 << ' ' << sum2 << ' ' << endl; if (s[i] != '.'){ anss += s[i]; continue; } if (sum1 > 0 && sum2 > 0) anss += '?'; else if (sum1 > 0) anss += 'X'; else anss += '_'; } /*for (int i = 1; i <= k; i++){ for (int j = 0; j < vec[i].size(); j++) cout << vec[i][j] << ' '; cout << endl; }*/ return anss; } /** ...X....X. 2 3 4 */

Compilation message (stderr)

paint.cpp: In function 'std::__cxx11::string solve_puzzle(std::__cxx11::string, std::vector<int>)':
paint.cpp:46:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             while(ptrR[j-1] + 1 < vec[j-1].size() && vec[j-1][ptrR[j-1]+1] < i - sz + (j == 1))
                   ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
paint.cpp:48:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             while(ptrL[j-1] < vec[j-1].size() && pref2[i-sz]-pref2[max(0, vec[j-1][ptrL[j-1]])] > 0)
                   ~~~~~~~~~~^~~~~~~~~~~~~~~~~
paint.cpp:51:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if (ptrR[j-1] < vec[j-1].size() && ptrL[j-1] <= ptrR[j-1] && vec[j-1][ptrL[j-1]] < i - sz + (j == 1)){
                 ~~~~~~~~~~^~~~~~~~~~~~~~~~~
paint.cpp:61:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int i = 0; i < vec[j].size(); i++){
                         ~~^~~~~~~~~~~~~~~
paint.cpp:71:21: warning: variable 'sz2' set but not used [-Wunused-but-set-variable]
                 int sz2;
                     ^~~
#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...