Submission #1204511

#TimeUsernameProblemLanguageResultExecution timeMemory
1204511PlayVoltzPaint By Numbers (IOI16_paint)C++20
100 / 100
235 ms174224 KiB
#include "paint.h"
#include <bits/stdc++.h>
using namespace std;

string solve_puzzle(string s, vector<int> vect){
	int n=s.size(), k=vect.size();
	string ans(n, '.');
	s = '.'+s;
	vect.insert(vect.begin(), 0);
	vector<bool> cw(n+1, 0);
	vector<int> psum(n+1, 0);
	for (int i=1; i<=n; ++i)psum[i]=psum[i-1]+(s[i]=='_');
	vector<vector<int> > dp(n+1, vector<int>(k+1, 0)), dp2(n+1, vector<int>(k+1, 0));
	dp[0][0]=3;
	for (int i=1; i<=n; ++i)for (int j=0; j<=k; ++j){
		if (s[i]!='X'&&dp[i-1][j])dp[i][j]|=1;
		if (j==1&&vect[j]<=i&&psum[i]==psum[i-vect[j]]&&dp[i-vect[j]][j-1])dp[i][j]|=2;
		if (j>1&&vect[j]<i&&psum[i]==psum[i-vect[j]]&&s[i-vect[j]]!='X'&&dp[i-vect[j]-1][j-1])dp[i][j]|=2;
	}
	dp2[n][k]=1;
	int mn=INT_MAX/2;
	for (int i=n; i>=1; --i){
		for (int j=0; j<=k; ++j)if (dp2[i][j]){
			if (dp[i][j]&1)dp2[i-1][j]=1, cw[i]=1;
			if (j==1&&dp[i][j]&2)dp2[i-vect[j]][j-1]=1, mn=min(mn, i-vect[j]+1);
			if (j>1&&dp[i][j]&2)dp2[i-vect[j]-1][j-1]=1, mn=min(mn, i-vect[j]+1), cw[i-vect[j]]=1;
		}
		if (cw[i]&&mn<=i)ans[i-1]='?';
		else if (cw[i])ans[i-1]='_';
		else ans[i-1]='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...