Submission #126397

#TimeUsernameProblemLanguageResultExecution timeMemory
126397tinjyuPaint By Numbers (IOI16_paint)C++14
0 / 100
2 ms376 KiB
#include "paint.h"
 
#include <cstdlib>
#include <iostream>
using namespace std;
long long int sum[105],lastx,w[200005],b[200005],m,n,c[5005],tag[105][200005];
string s;
string a;
long long int find(int p,int now)
{
	//cout<<p<<" "<<now<<endl;
	if(now+sum[p]>=n+2)return 2;
	if(tag[p][now]!=0)return tag[p][now];
	if(p==m)
	{
		//cout<<now<<" "<<lastx<<endl;
		if(now-1<lastx)return 2;
		return 1;
	}
	
	tag[p][now]=2;
	long long int maxb=-1,maxw=-1;
	for(int i=now;i<c[p]+now;i++)if(s[i]=='_')maxw=i;
	for(int i=now;i<c[p]+now;i++)
	{
		
		if(s[i]=='X')
		{
			maxb=i;
			break;
		}
	}
	for(int i=now;i+c[p]-1<n;i++)
	{
		//cout<<i<<endl;
		long long int cnt=0;
		if(s[i+c[p]-1]=='X' && maxb==-1)maxb=i+c[p]-1;
		if(i>maxb && maxb!=-1)break;
		if(s[i+c[p]-1]=='_')maxw=i+c[p]-1;
		if(cnt==1 || s[c[p]+i]=='X' || maxw>=i)continue;
		if(find(p+1,i+c[p]+1)==1)
		{
			//cout<<p<<" "<<now<<" "<<i<<endl;
			//cout<<a<<endl;
			tag[p][i]=1;
			w[now]++;
			w[i]--;
			//cout<<a<<endl;
			b[i]++;
			b[i+c[p]]--;
			//cout<<a<<endl;
			if(p!=m-1)
			{
				w[i+c[p]]++;
				w[i+c[p]+1]--;
			}
			else
			{
				w[i+c[p]]++;
				w[n]--;
			}
			tag[p][now]=1;
		}
	}
	return tag[p][now];
}
std::string solve_puzzle(std::string x, std::vector<int> l) {
    
	s=x;
    a=x;
    m=l.size();
    n=s.length();
    lastx=-1;
    for(int i=0;i<n;i++)
	{
		a[i]=s[i];
		if(s[i]=='X')lastx=i;
	}
    for(int i=0;i<m;i++)c[i]=l[i];
 	sum[m]=-1;
	for(int i=m-1;i>=0;i--)
 	{
 		sum[i]+=sum[i+1]+c[i]+1;
 		cout<<sum[i]<<endl;
	}
    find(0,0);
    long long int tmpb=0,tmpw=0;
    for(int i=0;i<n;i++)
    {
    	
    	tmpb+=b[i];
    	tmpw+=w[i];
		if(s[i]!='.')a[i]=s[i];
    	else if(tmpb>0 && tmpw>0)a[i]='?';
    	else if(tmpb>0)a[i]='X';
    	else a[i]='_';
	}
    //cout<<a<<endl;
	return a;
}
#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...