Submission #889691

#TimeUsernameProblemLanguageResultExecution timeMemory
889691UmairAhmadMirzaPaint By Numbers (IOI16_paint)C++17
59 / 100
1 ms436 KiB
#pragma once

#include<bits/stdc++.h>
using namespace std;
int k=0;
string s;
vector<int> c;
int n;
int const N=105;
int pre[N][N];
int suf[N][N];
bool check(int a,int b,int l,int r){
	if(a>b)
		return 1;
	int p=a;
	int ind=l;
	while(p<=b){
		if(ind+c[p]>(r+1))
			return 0;
		bool bl=1;
		for (int i = ind; i < ind+c[p]; ++i)
			if(s[i]=='_')
				bl=0;
		if(bl){
			ind+=c[p];
			p++;
			if(p<=b)
				ind++;
		}
		else
			ind++;
	}
	return 1;
}
void preprocess(){
	for (int i = -1; i < n; ++i)
		for (int j = -1; j < k; ++j)
			pre[i+1][j+1]=check(0,j,0,i);
	for (int i = n; i>=0; --i)
		for(int j=k;j>=0;j--)
			suf[i][j]=check(j,k-1,i,n-1);
}
string solve_puzzle(string ss, vector<int> cc){
	k=cc.size();
	c=cc;
	s=ss;
	n=s.length();
	preprocess();
	for (int i = 0; i < n; ++i)
	{
		if(s[i]=='_')
			continue;
		//if i put a _ here then check that is there a valid solution
		s[i]='X';
		for (int j = -1; j < k; ++j)
			if(pre[i][j+1] && suf[i+1][j+1]){
				s[i]='?';
				break;
			}
	}
	int tot=0;
	for (int i = 0; i < k; ++i)
		tot+=c[i];
	for (int i = 0; i < n; ++i)
	{
		if(s[i]=='X')
			continue;
		int sm=0;
		bool bb=1;
		for (int j = 0; j < k; ++j)
		{
			for (int f = max(0,(i-c[j])+1); f <=i; ++f)
			{
				if(f+c[j]>n)
					break;
				bool bl=0;
				for(int ii=f;ii<f+c[j];ii++)
					if(s[ii]=='_'){
						bl=1;
						break;
					}
				if(bl)
					continue;
				if(pre[f-(j>0)][j] && suf[f+c[j]+(j<k-1)][j+1]){
					bb=0;
					break;
				}
			}
			if(bb==0)
				break;
			sm+=c[j];
		}
		if(bb)
			s[i]='_';
	}
	return s;
}

Compilation message (stderr)

paint.cpp: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...