Submission #421802

#TimeUsernameProblemLanguageResultExecution timeMemory
421802PyqeSequence (BOI14_sequence)C++14
100 / 100
139 ms1376 KiB
#include <bits/stdc++.h>

using namespace std;

const long long inf=1e18;
long long nn[8],p10[60],z=inf;
bitset<11> fq[8][100069],tmp;

void rk(long long x,long long cw,bool bad)
{
	if(nn[x]>1)
	{
		long long i,j;
		
		for(i=0;i<10-bad;i++)
		{
			nn[x+1]=(nn[x]+i-1)/10+1;
			for(j=0;j<nn[x+1];j++)
			{
				fq[x+1][j].reset();
			}
			for(j=0;j<nn[x];j++)
			{
				tmp=fq[x][j];
				if((i+j)%10==0)
				{
					tmp[10]=tmp[10]||tmp[0];
				}
				tmp[(i+j)%10]=0;
				if((i+j)%10)
				{
					tmp[10]=0;
				}
				fq[x+1][(i+j)/10]|=tmp;
			}
			rk(x+1,cw+i*p10[x],nn[x+1]==nn[x]);
		}
	}
	else
	{
		long long i,l=0,p=x;
		
		for(i=9;i;i--)
		{
			if(fq[x][0][i])
			{
				cw+=i*p10[p];
				p++;
				l=i;
			}
		}
		if(fq[x][0][0])
		{
			cw+=l*(p10[p]-p10[p-1]);
			p++;
		}
		if((fq[x][0][0]||fq[x][0][10])&&!l)
		{
			cw+=p10[p];
		}
		z=min(z,cw);
	}
}

int main()
{
	long long i,k;
	
	p10[0]=1;
	for(i=1;i<60;i++)
	{
		p10[i]=p10[i-1]*10;
	}
	scanf("%lld",nn);
	for(i=0;i<nn[0];i++)
	{
		scanf("%lld",&k);
		fq[0][i][k]=1;
	}
	rk(0,0,0);
	printf("%lld\n",z);
}

Compilation message (stderr)

sequence.cpp: In function 'int main()':
sequence.cpp:74:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   74 |  scanf("%lld",nn);
      |  ~~~~~^~~~~~~~~~~
sequence.cpp:77:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   77 |   scanf("%lld",&k);
      |   ~~~~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...