Submission #126778

#TimeUsernameProblemLanguageResultExecution timeMemory
126778SortingPaint By Numbers (IOI16_paint)C++14
0 / 100
2 ms376 KiB
#include <bits/stdc++.h>

using namespace std;

const int N = 2e5 + 7;
const int K = 1e2 + 7;

pair<bool, bool> dp[N][K];
string s, ans;
vector<int> c;
int a[N], n;

bool solve(int i1, int i2){
	//cout << i1 << " " << i2 << endl;

	if(i1 == n){
		if(i2 == c.size()){
			return 1;
		}
		return 0;
	}

	if(dp[i1][i2].second){
		return dp[i1][i2].first;
	}

	dp[i1][i2].second = true;
	dp[i1][i2].first = false;

	if(s[i1] == '.' || s[i1] == '_'){
		bool b = solve(i1 + 1, i2);
		
		if(b){
			if(ans[i1] == '_'){
				ans[i1] = '_';
			}
			else{
				if(ans[i1] != '_'){
					ans[i1] = '?';
				}
			}
			dp[i1][i2].first = true;
		}
	}
	if(a[i1] >= c[i2]){
		bool b = solve(i1 + c[i2], i2 + 1);

		if(b){
			if(ans[i1] == 'X'){
				ans[i1] = 'X';
			}
			else{
				if(ans[i1] != 'X'){
					ans[i1] = '?';
				}
			}
			dp[i1][i2].first = true;
		}
	}

	return dp[i1][i2].first;
}

string solve_puzzle(string _s, vector<int> _c){
	n = _s.size();

	s = _s;
	for(int i = 0; i < (int)_c.size(); i++){
		c.push_back(_c[i]);
	}

	if(s[n - 1] == 'X' || s[n - 1] == '.'){
		a[n - 1] = 1;
	}
	else{
		a[n - 1] = 0;
	}
	for(int i = n - 2; i >= 0; i--){
		if(s[i] == 'X' || s[i] == '.'){
			a[i] = a[i + 1] + 1;
		}
		else{
			a[i] = 0;
		}
	}

	//for(int i = 0; i < n; i++){
	//	cout << a[i] << " ";
	//}
	//cout << endl;

	ans = s;

	solve(0, 0);

	return ans;
}

/*int main(){
	string _s;
	vector<int> _c;
	int k;

	cin >> _s;

	cin >> k;

	for(int i = 0; i < k; i++){
		int x;

		cin >> x;

		_c.push_back(x);
	}

	cout << solve_puzzle(_s, _c) << endl;

	return 0;
}*/
/*
..........
2
3 4
*/

Compilation message (stderr)

paint.cpp: In function 'bool solve(int, int)':
paint.cpp:17:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(i2 == c.size()){
      ~~~^~~~~~~~~~~
#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...