Submission #276973

#TimeUsernameProblemLanguageResultExecution timeMemory
276973ElyesChaabouniPaint By Numbers (IOI16_paint)C++14
Compilation error
0 ms0 KiB
/*#pragma GCC optimize("O3")*/
#include<bits/stdc++.h>
//#include "paint.h"
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
//#define ordered_set tree<int, null_type,less<int >, rb_tree_tag,tree_order_statistics_node_update>
#define eps 1e-9
#define MOD1 998244353
#define MOD2 1000000007
#define INV_10 299473306
#define INF 1000000000
#define PI 3.14159265358979323846
using namespace std;
string solve_puzzle(string s, vector<int> c)
{
	int n=s.length(), k=c.size();
	int pr[n+1];
	int mi=n, ma=0;
	for(int i = 0;i < n+1; i++)
		pr[i]=0;
	for(int i = s.length()-1; i >= 0; i--)
	{
		if(s[i]=='_')
			pr[i]=1;
		if(s[i]=='X')
		{
			mi=min(mi, i);
			ma=max(ma, i);
		}
		pr[i]+=pr[i+1];
	}
	/*for(int i = 0; i <= n; i++)
		cout << pr[i] << ' ';
	cout << '\n';*/
	int dp[n+1][k+1];
	for(int i = 0; i < n+1; i++)
		for(int j = 0; j < k+1; j++)
			dp[i][j]=0;
	dp[n][k]=1;
	for(int i = n-1; i >= 0; i--)
		dp[i][k]=1+dp[i+1][k];
	for(int i = k-1; i >= 0; i--)
	{
		for(int j = n-1; j >= 0; j--)
		{
			if(j+c[i]-1 < n && (i!=0 || i <= mi) && (i!=n-1 || i+c[j]-1 >= ma) && (j+c[i] == n || s[j+c[i]]!='X') && (j==0 || s[j-1]!='X') && pr[j]-pr[j+c[i]]==0 && ((i==k-1)||(j+c[i]+1 <= n && dp[j+c[i]+1][i+1] > 0)))
				dp[j][i]=1;
			dp[j][i]+=dp[j+1][i];
		}
	}
	for(int i = 0; i < n; i++)
	{
		if(s[i]=='X')
		{
			for(int j = 0; j < k-1 && !done; j++)
			{
				if(dp[0][j]-dp[max(i-c[j]+1, 0)][j] > 0 && dp[i+1][j+1]-dp[n][j+1] > 0)
					dp[i+1][j+1]=0;
			}
		}
	}
	for(int i = 0; i < k; i++)
	{
		int cu=10000000000;
		for(int j = 0; j < n; j++)
		{
			cu=min(cu, dp[j][i]);
			dp[j][i]=cu;
		}
	}
	/*for(int i = 0; i <= k; i++)
	{
		for(int j = 0; j <= n; j++)
		{
			cout << dp[j][i] << ' ';
		}
		cout << '\n';
	}*/
	for(int i = 1; i < k; i++)
	{
		int sum=0;
		for(int j = n-1; j >= 0; j--)
		{
			int x=dp[j][i];
			dp[j][i]=dp[j+1][i];
			if(x==sum+1)
			{
				sum++;
				if(j-1-c[i-1] >= 0 && dp[0][i-1]-dp[j-1-c[i-1]+1][i-1] > 0)
					dp[j][i]++;
			}
		}
	}
	for(int i = 0; i < n; i++)
	{
		bool done=0;
		if(s[i]=='.')
		{
			for(int j = 0; j < k && !done; j++)
			{
				int pos=max(0, i-c[j]+1);
				if(dp[pos][j]-dp[i+1][j] > 0)
					done=1;
			}
			if(!done)
			{
				s[i]='_';
			}
			else
			{
				done=0;
				if((dp[0][k-1]-dp[max(i-c[k-1]+1, 0)][k-1] > 0 && i!=0) || (dp[i+1][0]-dp[n][0] > 0 && i!=n-1))
					done=1;
				for(int j = 0; j < k-1 && !done && i!=0 && i!=n-1; j++)
				{
					if(dp[0][j]-dp[max(i-c[j]+1, 0)][j] > 0 && dp[i+1][j+1]-dp[n][j+1] > 0)
						done=1;
				}
				if(!done)
				{
					s[i]='X';
				}
				else
					s[i]='?';
			}
		}
	}
	return s;
}
/*int main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
	string s;
	cin >> s;
	int k;
	cin >> k;
	vector<int>v;
	for(int i = 0; i < k; i++)
	{
		int x;
		cin >> x;
		v.push_back(x);
	}
	cout << solve_puzzle(s, v) << '\n';
}*/
//size

Compilation message (stderr)

paint.cpp: In function 'std::string solve_puzzle(std::string, std::vector<int>)':
paint.cpp:55:31: error: 'done' was not declared in this scope
   55 |    for(int j = 0; j < k-1 && !done; j++)
      |                               ^~~~
paint.cpp:64:10: warning: overflow in conversion from 'long int' to 'int' changes value from '10000000000' to '1410065408' [-Woverflow]
   64 |   int cu=10000000000;
      |          ^~~~~~~~~~~