[CSP-S模拟测试]:小L的数(数位DP+模拟)

题目传送门(内部题132)


输入格式

  第一行一个整数$t$。
  接下来$t$行每行一个整数$n$。


输出格式

  $t$行,每行一个整数表示答案。


样例

样例输入:

4
1818
23123
269105
21093203

样例输出:

1
2
3
3


数据范围与提示

  对于前$5\%$的测试数据,满足答案小于等于$1$。
  对于前$20\%$的测试数据,满足答案小于等于$2$。
  对于前$40\%$的测试数据,满足$n\leqslant 300,000$。
  对于前$60\%$的测试数据,满足答案小于等于$3$,$n\leqslant 10^{13}$。
  对于前$90\%$的测试数据,满足$t\leqslant 30$。
  对于$100\%$的测试数据,满足$1\leqslant n\leqslant 10^{18},1\leqslant t\leqslant 100$。


题解

答案一定不大于$4$,所以可以枚举二元组。

先特判答案为$1$的情况,然后用两个二元组尝试,如果不行在用三个,否则直接输出$4$即可。

考虑如何判断,数位$DP$。

设$dp[i][0/1/2][0/1][0/1][0/1]$表示到了第$i$位,进位为$0/1/2$,三个二元组有没有前导$0$。

转移过程我认为是一个模拟(看我代码就知道了……)。

好多人都说被卡常了,然而我一直$WA$,不过到底是调出来了。

时间复杂度:$\Theta(2043360\times T)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
char ch[20];
int s,w[20],tot;
char vis[10];
pair<int,int> F[100];
bool dp[20][3][2][2][2];
void pre_work(){for(int i=0;i<9;i++)for(int j=i+1;j<=9;j++)F[++tot]=make_pair(i,j);}
int ask()
{
	int sum=0;
	memset(vis,0,sizeof(vis));
	for(int i=1;i<=s;i++)
		if(!vis[w[i]]){vis[w[i]]=1;sum++;}
	if(sum<=2)return 1;
	for(int i=1;i<=tot;i++)
	{
		for(int j=i;j<=tot;j++)
		{
			memset(dp,0,sizeof(dp));
			int a=F[i].first,b=F[i].second;
			int c=F[j].first,d=F[j].second;
			dp[1][0][0][0][0]=1;
			dp[1][0][0][0][1]=1;
			dp[1][0][0][1][0]=1;
			dp[1][0][0][1][1]=1;
			for(int x=1;x<=s;x++)
			{
				if(dp[x][0][0][0][0])
				{
					if((a+c)%10==w[x])dp[x+1][(a+c)/10][0][0][0]=dp[x+1][(a+c)/10][0][0][1]=dp[x+1][(a+c)/10][0][1][0]=dp[x+1][(a+c)/10][0][1][1]=1;
					if((a+d)%10==w[x])dp[x+1][(a+d)/10][0][0][0]=dp[x+1][(a+d)/10][0][0][1]=dp[x+1][(a+d)/10][0][1][0]=dp[x+1][(a+d)/10][0][1][1]=1;
					if((b+c)%10==w[x])dp[x+1][(b+c)/10][0][0][0]=dp[x+1][(b+c)/10][0][0][1]=dp[x+1][(b+c)/10][0][1][0]=dp[x+1][(b+c)/10][0][1][1]=1;
					if((b+d)%10==w[x])dp[x+1][(b+d)/10][0][0][0]=dp[x+1][(b+d)/10][0][0][1]=dp[x+1][(b+d)/10][0][1][0]=dp[x+1][(b+d)/10][0][1][1]=1;
				}
				if(dp[x][1][0][0][0])
				{
					if((a+c+1)%10==w[x])dp[x+1][(a+c+1)/10][0][0][0]=dp[x+1][(a+c+1)/10][0][0][1]=dp[x+1][(a+c+1)/10][0][1][0]=dp[x+1][(a+c+1)/10][0][1][1]=1;
					if((a+d+1)%10==w[x])dp[x+1][(a+d+1)/10][0][0][0]=dp[x+1][(a+d+1)/10][0][0][1]=dp[x+1][(a+d+1)/10][0][1][0]=dp[x+1][(a+d+1)/10][0][1][1]=1;
					if((b+c+1)%10==w[x])dp[x+1][(b+c+1)/10][0][0][0]=dp[x+1][(b+c+1)/10][0][0][1]=dp[x+1][(b+c+1)/10][0][1][0]=dp[x+1][(b+c+1)/10][0][1][1]=1;
					if((b+d+1)%10==w[x])dp[x+1][(b+d+1)/10][0][0][0]=dp[x+1][(b+d+1)/10][0][0][1]=dp[x+1][(b+d+1)/10][0][1][0]=dp[x+1][(b+d+1)/10][0][1][1]=1;
				}
				if(dp[x][0][0][0][1])
				{
					if(w[x]==c)dp[x+1][0][0][0][1]=dp[x+1][0][0][1][1]=1;
					if(w[x]==d)dp[x+1][0][0][0][1]=dp[x+1][0][0][1][1]=1;
				}
				if(dp[x][1][0][0][1])
				{
					if(w[x]==(c+1)%10)dp[x+1][(c+1)/10][0][0][1]=dp[x+1][(c+1)/10][0][1][1]=1;
					if(w[x]==(d+1)%10)dp[x+1][(d+1)/10][0][0][1]=dp[x+1][(d+1)/10][0][1][1]=1;
				}
				if(dp[x][0][0][1][0])
				{
					if(w[x]==a)dp[x+1][0][0][1][0]=dp[x+1][0][0][1][1]=1;
					if(w[x]==b)dp[x+1][0][0][1][0]=dp[x+1][0][0][1][1]=1;
				}
				if(dp[x][1][0][1][0])
				{
					if(w[x]==(a+1)%10)dp[x+1][(a+1)/10][0][1][0]=dp[x+1][(a+1)/10][0][1][1]=1;
					if(w[x]==(b+1)%10)dp[x+1][(b+1)/10][0][1][0]=dp[x+1][(b+1)/10][0][1][1]=1;
				}
				if(dp[x][0][0][1][1]&&!w[x])dp[x+1][0][0][1][1]=1;
				if(dp[x][1][0][1][1]&&w[x]==1)dp[x+1][0][0][1][1]=1;
			}
			if(dp[s+1][0][0][0][0])return 2;
			if(dp[s+1][0][0][0][1])return 2;
			if(dp[s+1][0][0][1][0])return 2;
			if(dp[s+1][0][0][1][1])return 2;
		}
	}
	for(int i=1;i<=tot;i++)
	{
		for(int j=i;j<=tot;j++)
		{
			for(int k=j;k<=tot;k++)
			{
				memset(dp,0,sizeof(dp));
				int a=F[i].first,b=F[i].second;
				int c=F[j].first,d=F[j].second;
				int e=F[k].first,f=F[k].second;
				dp[1][0][0][0][0]=1;
				dp[1][0][0][0][1]=1;
				dp[1][0][0][1][0]=1;
				dp[1][0][0][1][1]=1;
				dp[1][0][1][0][0]=1;
				dp[1][0][1][0][1]=1;
				dp[1][0][1][1][0]=1;
				dp[1][0][1][1][1]=1;
				for(int x=1;x<=s;x++)
				{
					if(dp[x][0][0][0][0])
					{
						if((a+c+e)%10==w[x])
						{
							dp[x+1][(a+c+e)/10][0][0][0]=1;
							dp[x+1][(a+c+e)/10][0][0][1]=1;
							dp[x+1][(a+c+e)/10][0][1][0]=1;
							dp[x+1][(a+c+e)/10][0][1][1]=1;
							dp[x+1][(a+c+e)/10][1][0][0]=1;
							dp[x+1][(a+c+e)/10][1][0][1]=1;
							dp[x+1][(a+c+e)/10][1][1][0]=1;
							dp[x+1][(a+c+e)/10][1][1][1]=1;
						}
						if((a+c+f)%10==w[x])
						{
							dp[x+1][(a+c+f)/10][0][0][0]=1;
							dp[x+1][(a+c+f)/10][0][0][1]=1;
							dp[x+1][(a+c+f)/10][0][1][0]=1;
							dp[x+1][(a+c+f)/10][0][1][1]=1;
							dp[x+1][(a+c+f)/10][1][0][0]=1;
							dp[x+1][(a+c+f)/10][1][0][1]=1;
							dp[x+1][(a+c+f)/10][1][1][0]=1;
							dp[x+1][(a+c+f)/10][1][1][1]=1;
						}
						if((a+d+e)%10==w[x])
						{
							dp[x+1][(a+d+e)/10][0][0][0]=1;
							dp[x+1][(a+d+e)/10][0][0][1]=1;
							dp[x+1][(a+d+e)/10][0][1][0]=1;
							dp[x+1][(a+d+e)/10][0][1][1]=1;
							dp[x+1][(a+d+e)/10][1][0][0]=1;
							dp[x+1][(a+d+e)/10][1][0][1]=1;
							dp[x+1][(a+d+e)/10][1][1][0]=1;
							dp[x+1][(a+d+e)/10][1][1][1]=1;
						}
						if((a+d+f)%10==w[x])
						{
							dp[x+1][(a+d+f)/10][0][0][0]=1;
							dp[x+1][(a+d+f)/10][0][0][1]=1;
							dp[x+1][(a+d+f)/10][0][1][0]=1;
							dp[x+1][(a+d+f)/10][0][1][1]=1;
							dp[x+1][(a+d+f)/10][1][0][0]=1;
							dp[x+1][(a+d+f)/10][1][0][1]=1;
							dp[x+1][(a+d+f)/10][1][1][0]=1;
							dp[x+1][(a+d+f)/10][1][1][1]=1;
						}
						if((b+c+e)%10==w[x])
						{
							dp[x+1][(b+c+e)/10][0][0][0]=1;
							dp[x+1][(b+c+e)/10][0][0][1]=1;
							dp[x+1][(b+c+e)/10][0][1][0]=1;
							dp[x+1][(b+c+e)/10][0][1][1]=1;
							dp[x+1][(b+c+e)/10][1][0][0]=1;
							dp[x+1][(b+c+e)/10][1][0][1]=1;
							dp[x+1][(b+c+e)/10][1][1][0]=1;
							dp[x+1][(b+c+e)/10][1][1][1]=1;
						}
						if((b+c+f)%10==w[x])
						{
							dp[x+1][(b+c+f)/10][0][0][0]=1;
							dp[x+1][(b+c+f)/10][0][0][1]=1;
							dp[x+1][(b+c+f)/10][0][1][0]=1;
							dp[x+1][(b+c+f)/10][0][1][1]=1;
							dp[x+1][(b+c+f)/10][1][0][0]=1;
							dp[x+1][(b+c+f)/10][1][0][1]=1;
							dp[x+1][(b+c+f)/10][1][1][0]=1;
							dp[x+1][(b+c+f)/10][1][1][1]=1;
						}
						if((b+d+e)%10==w[x])
						{
							dp[x+1][(b+d+e)/10][0][0][0]=1;
							dp[x+1][(b+d+e)/10][0][0][1]=1;
							dp[x+1][(b+d+e)/10][0][1][0]=1;
							dp[x+1][(b+d+e)/10][0][1][1]=1;
							dp[x+1][(b+d+e)/10][1][0][0]=1;
							dp[x+1][(b+d+e)/10][1][0][1]=1;
							dp[x+1][(b+d+e)/10][1][1][0]=1;
							dp[x+1][(b+d+e)/10][1][1][1]=1;
						}
						if((b+d+f)%10==w[x])
						{
							dp[x+1][(b+d+f)/10][0][0][0]=1;
							dp[x+1][(b+d+f)/10][0][0][1]=1;
							dp[x+1][(b+d+f)/10][0][1][0]=1;
							dp[x+1][(b+d+f)/10][0][1][1]=1;
							dp[x+1][(b+d+f)/10][1][0][0]=1;
							dp[x+1][(b+d+f)/10][1][0][1]=1;
							dp[x+1][(b+d+f)/10][1][1][0]=1;
							dp[x+1][(b+d+f)/10][1][1][1]=1;
						}
					}
					if(dp[x][1][0][0][0])
					{
						if((a+c+e+1)%10==w[x])
						{
							dp[x+1][(a+c+e+1)/10][0][0][0]=1;
							dp[x+1][(a+c+e+1)/10][0][0][1]=1;
							dp[x+1][(a+c+e+1)/10][0][1][0]=1;
							dp[x+1][(a+c+e+1)/10][0][1][1]=1;
							dp[x+1][(a+c+e+1)/10][1][0][0]=1;
							dp[x+1][(a+c+e+1)/10][1][0][1]=1;
							dp[x+1][(a+c+e+1)/10][1][1][0]=1;
							dp[x+1][(a+c+e+1)/10][1][1][1]=1;
						}
						if((a+c+f+1)%10==w[x])
						{
							dp[x+1][(a+c+f+1)/10][0][0][0]=1;
							dp[x+1][(a+c+f+1)/10][0][0][1]=1;
							dp[x+1][(a+c+f+1)/10][0][1][0]=1;
							dp[x+1][(a+c+f+1)/10][0][1][1]=1;
							dp[x+1][(a+c+f+1)/10][1][0][0]=1;
							dp[x+1][(a+c+f+1)/10][1][0][1]=1;
							dp[x+1][(a+c+f+1)/10][1][1][0]=1;
							dp[x+1][(a+c+f+1)/10][1][1][1]=1;
						}
						if((a+d+e+1)%10==w[x])
						{
							dp[x+1][(a+d+e+1)/10][0][0][0]=1;
							dp[x+1][(a+d+e+1)/10][0][0][1]=1;
							dp[x+1][(a+d+e+1)/10][0][1][0]=1;
							dp[x+1][(a+d+e+1)/10][0][1][1]=1;
							dp[x+1][(a+d+e+1)/10][1][0][0]=1;
							dp[x+1][(a+d+e+1)/10][1][0][1]=1;
							dp[x+1][(a+d+e+1)/10][1][1][0]=1;
							dp[x+1][(a+d+e+1)/10][1][1][1]=1;
						}
						if((a+d+f+1)%10==w[x])
						{
							dp[x+1][(a+d+f+1)/10][0][0][0]=1;
							dp[x+1][(a+d+f+1)/10][0][0][1]=1;
							dp[x+1][(a+d+f+1)/10][0][1][0]=1;
							dp[x+1][(a+d+f+1)/10][0][1][1]=1;
							dp[x+1][(a+d+f+1)/10][1][0][0]=1;
							dp[x+1][(a+d+f+1)/10][1][0][1]=1;
							dp[x+1][(a+d+f+1)/10][1][1][0]=1;
							dp[x+1][(a+d+f+1)/10][1][1][1]=1;
						}
						if((b+c+e+1)%10==w[x])
						{
							dp[x+1][(b+c+e+1)/10][0][0][0]=1;
							dp[x+1][(b+c+e+1)/10][0][0][1]=1;
							dp[x+1][(b+c+e+1)/10][0][1][0]=1;
							dp[x+1][(b+c+e+1)/10][0][1][1]=1;
							dp[x+1][(b+c+e+1)/10][1][0][0]=1;
							dp[x+1][(b+c+e+1)/10][1][0][1]=1;
							dp[x+1][(b+c+e+1)/10][1][1][0]=1;
							dp[x+1][(b+c+e+1)/10][1][1][1]=1;
						}
						if((b+c+f+1)%10==w[x])
						{
							dp[x+1][(b+c+f+1)/10][0][0][0]=1;
							dp[x+1][(b+c+f+1)/10][0][0][1]=1;
							dp[x+1][(b+c+f+1)/10][0][1][0]=1;
							dp[x+1][(b+c+f+1)/10][0][1][1]=1;
							dp[x+1][(b+c+f+1)/10][1][0][0]=1;
							dp[x+1][(b+c+f+1)/10][1][0][1]=1;
							dp[x+1][(b+c+f+1)/10][1][1][0]=1;
							dp[x+1][(b+c+f+1)/10][1][1][1]=1;
						}
						if((b+d+e+1)%10==w[x])
						{
							dp[x+1][(b+d+e+1)/10][0][0][0]=1;
							dp[x+1][(b+d+e+1)/10][0][0][1]=1;
							dp[x+1][(b+d+e+1)/10][0][1][0]=1;
							dp[x+1][(b+d+e+1)/10][0][1][1]=1;
							dp[x+1][(b+d+e+1)/10][1][0][0]=1;
							dp[x+1][(b+d+e+1)/10][1][0][1]=1;
							dp[x+1][(b+d+e+1)/10][1][1][0]=1;
							dp[x+1][(b+d+e+1)/10][1][1][1]=1;
						}
						if((b+d+f+1)%10==w[x])
						{
							dp[x+1][(b+d+f+1)/10][0][0][0]=1;
							dp[x+1][(b+d+f+1)/10][0][0][1]=1;
							dp[x+1][(b+d+f+1)/10][0][1][0]=1;
							dp[x+1][(b+d+f+1)/10][0][1][1]=1;
							dp[x+1][(b+d+f+1)/10][1][0][0]=1;
							dp[x+1][(b+d+f+1)/10][1][0][1]=1;
							dp[x+1][(b+d+f+1)/10][1][1][0]=1;
							dp[x+1][(b+d+f+1)/10][1][1][1]=1;
						}
					}
					if(dp[x][2][0][0][0])
					{
						if((a+c+e+2)%10==w[x])
						{
							dp[x+1][(a+c+e+2)/10][0][0][0]=1;
							dp[x+1][(a+c+e+2)/10][0][0][1]=1;
							dp[x+1][(a+c+e+2)/10][0][1][0]=1;
							dp[x+1][(a+c+e+2)/10][0][1][1]=1;
							dp[x+1][(a+c+e+2)/10][1][0][0]=1;
							dp[x+1][(a+c+e+2)/10][1][0][1]=1;
							dp[x+1][(a+c+e+2)/10][1][1][0]=1;
							dp[x+1][(a+c+e+2)/10][1][1][1]=1;
						}
						if((a+c+f+2)%10==w[x])
						{
							dp[x+1][(a+c+f+2)/10][0][0][0]=1;
							dp[x+1][(a+c+f+2)/10][0][0][1]=1;
							dp[x+1][(a+c+f+2)/10][0][1][0]=1;
							dp[x+1][(a+c+f+2)/10][0][1][1]=1;
							dp[x+1][(a+c+f+2)/10][1][0][0]=1;
							dp[x+1][(a+c+f+2)/10][1][0][1]=1;
							dp[x+1][(a+c+f+2)/10][1][1][0]=1;
							dp[x+1][(a+c+f+2)/10][1][1][1]=1;
						}
						if((a+d+e+2)%10==w[x])
						{
							dp[x+1][(a+d+e+2)/10][0][0][0]=1;
							dp[x+1][(a+d+e+2)/10][0][0][1]=1;
							dp[x+1][(a+d+e+2)/10][0][1][0]=1;
							dp[x+1][(a+d+e+2)/10][0][1][1]=1;
							dp[x+1][(a+d+e+2)/10][1][0][0]=1;
							dp[x+1][(a+d+e+2)/10][1][0][1]=1;
							dp[x+1][(a+d+e+2)/10][1][1][0]=1;
							dp[x+1][(a+d+e+2)/10][1][1][1]=1;
						}
						if((a+d+f+2)%10==w[x])
						{
							dp[x+1][(a+d+f+2)/10][0][0][0]=1;
							dp[x+1][(a+d+f+2)/10][0][0][1]=1;
							dp[x+1][(a+d+f+2)/10][0][1][0]=1;
							dp[x+1][(a+d+f+2)/10][0][1][1]=1;
							dp[x+1][(a+d+f+2)/10][1][0][0]=1;
							dp[x+1][(a+d+f+2)/10][1][0][1]=1;
							dp[x+1][(a+d+f+2)/10][1][1][0]=1;
							dp[x+1][(a+d+f+2)/10][1][1][1]=1;
						}
						if((b+c+e+2)%10==w[x])
						{
							dp[x+1][(b+c+e+2)/10][0][0][0]=1;
							dp[x+1][(b+c+e+2)/10][0][0][1]=1;
							dp[x+1][(b+c+e+2)/10][0][1][0]=1;
							dp[x+1][(b+c+e+2)/10][0][1][1]=1;
							dp[x+1][(b+c+e+2)/10][1][0][0]=1;
							dp[x+1][(b+c+e+2)/10][1][0][1]=1;
							dp[x+1][(b+c+e+2)/10][1][1][0]=1;
							dp[x+1][(b+c+e+2)/10][1][1][1]=1;
						}
						if((b+c+f+2)%10==w[x])
						{
							dp[x+1][(b+c+f+2)/10][0][0][0]=1;
							dp[x+1][(b+c+f+2)/10][0][0][1]=1;
							dp[x+1][(b+c+f+2)/10][0][1][0]=1;
							dp[x+1][(b+c+f+2)/10][0][1][1]=1;
							dp[x+1][(b+c+f+2)/10][1][0][0]=1;
							dp[x+1][(b+c+f+2)/10][1][0][1]=1;
							dp[x+1][(b+c+f+2)/10][1][1][0]=1;
							dp[x+1][(b+c+f+2)/10][1][1][1]=1;
						}
						if((b+d+e+2)%10==w[x])
						{
							dp[x+1][(b+d+e+2)/10][0][0][0]=1;
							dp[x+1][(b+d+e+2)/10][0][0][1]=1;
							dp[x+1][(b+d+e+2)/10][0][1][0]=1;
							dp[x+1][(b+d+e+2)/10][0][1][1]=1;
							dp[x+1][(b+d+e+2)/10][1][0][0]=1;
							dp[x+1][(b+d+e+2)/10][1][0][1]=1;
							dp[x+1][(b+d+e+2)/10][1][1][0]=1;
							dp[x+1][(b+d+e+2)/10][1][1][1]=1;
						}
						if((b+d+f+2)%10==w[x])
						{
							dp[x+1][(b+d+f+2)/10][0][0][0]=1;
							dp[x+1][(b+d+f+2)/10][0][0][1]=1;
							dp[x+1][(b+d+f+2)/10][0][1][0]=1;
							dp[x+1][(b+d+f+2)/10][0][1][1]=1;
							dp[x+1][(b+d+f+2)/10][1][0][0]=1;
							dp[x+1][(b+d+f+2)/10][1][0][1]=1;
							dp[x+1][(b+d+f+2)/10][1][1][0]=1;
							dp[x+1][(b+d+f+2)/10][1][1][1]=1;
						}
					}
					if(dp[x][0][0][0][1])
					{
						if((c+e)%10==w[x])dp[x+1][(c+e)/10][0][0][1]=dp[x+1][(c+e)/10][0][1][1]=dp[x+1][(c+e)/10][1][0][1]=dp[x+1][(c+e)/10][1][1][1]=1;
						if((c+f)%10==w[x])dp[x+1][(c+f)/10][0][0][1]=dp[x+1][(c+f)/10][0][1][1]=dp[x+1][(c+f)/10][1][0][1]=dp[x+1][(c+f)/10][1][1][1]=1;
						if((d+e)%10==w[x])dp[x+1][(d+e)/10][0][0][1]=dp[x+1][(d+e)/10][0][1][1]=dp[x+1][(d+e)/10][1][0][1]=dp[x+1][(d+e)/10][1][1][1]=1;
						if((d+f)%10==w[x])dp[x+1][(d+f)/10][0][0][1]=dp[x+1][(d+f)/10][0][1][1]=dp[x+1][(d+f)/10][1][0][1]=dp[x+1][(d+f)/10][1][1][1]=1;
					}
					if(dp[x][1][0][0][1])
					{
						if((c+e+1)%10==w[x])dp[x+1][(c+e+1)/10][0][0][1]=dp[x+1][(c+e+1)/10][0][1][1]=dp[x+1][(c+e+1)/10][1][0][1]=dp[x+1][(c+e+1)/10][1][1][1]=1;
						if((c+f+1)%10==w[x])dp[x+1][(c+f+1)/10][0][0][1]=dp[x+1][(c+f+1)/10][0][1][1]=dp[x+1][(c+f+1)/10][1][0][1]=dp[x+1][(c+f+1)/10][1][1][1]=1;
						if((d+e+1)%10==w[x])dp[x+1][(d+e+1)/10][0][0][1]=dp[x+1][(d+e+1)/10][0][1][1]=dp[x+1][(d+e+1)/10][1][0][1]=dp[x+1][(d+e+1)/10][1][1][1]=1;
						if((d+f+1)%10==w[x])dp[x+1][(d+f+1)/10][0][0][1]=dp[x+1][(d+f+1)/10][0][1][1]=dp[x+1][(d+f+1)/10][1][0][1]=dp[x+1][(d+f+1)/10][1][1][1]=1;
					}
					if(dp[x][2][0][0][1])
					{
						if((c+e+2)%10==w[x])dp[x+1][(c+e+2)/10][0][0][1]=dp[x+1][(c+e+2)/10][0][1][1]=dp[x+1][(c+e+2)/10][1][0][1]=dp[x+1][(c+e+2)/10][1][1][1]=1;
						if((c+f+2)%10==w[x])dp[x+1][(c+f+2)/10][0][0][1]=dp[x+1][(c+f+2)/10][0][1][1]=dp[x+1][(c+f+2)/10][1][0][1]=dp[x+1][(c+f+2)/10][1][1][1]=1;
						if((d+e+2)%10==w[x])dp[x+1][(d+e+2)/10][0][0][1]=dp[x+1][(d+e+2)/10][0][1][1]=dp[x+1][(d+e+2)/10][1][0][1]=dp[x+1][(d+e+2)/10][1][1][1]=1;
						if((d+f+2)%10==w[x])dp[x+1][(d+f+2)/10][0][0][1]=dp[x+1][(d+f+2)/10][0][1][1]=dp[x+1][(d+f+2)/10][1][0][1]=dp[x+1][(d+f+2)/10][1][1][1]=1;
					}
					if(dp[x][0][0][1][0])
					{
						if((a+e)%10==w[x])dp[x+1][(a+e)/10][0][1][0]=dp[x+1][(a+e)/10][0][1][1]=dp[x+1][(a+e)/10][1][1][0]=dp[x+1][(a+e)/10][1][1][1]=1;
						if((a+f)%10==w[x])dp[x+1][(a+f)/10][0][1][0]=dp[x+1][(a+f)/10][0][1][1]=dp[x+1][(a+f)/10][1][1][0]=dp[x+1][(a+f)/10][1][1][1]=1;
						if((b+e)%10==w[x])dp[x+1][(b+e)/10][0][1][0]=dp[x+1][(b+e)/10][0][1][1]=dp[x+1][(b+e)/10][1][1][0]=dp[x+1][(b+e)/10][1][1][1]=1;
						if((b+f)%10==w[x])dp[x+1][(b+f)/10][0][1][0]=dp[x+1][(b+f)/10][0][1][1]=dp[x+1][(b+f)/10][1][1][0]=dp[x+1][(b+f)/10][1][1][1]=1;
					}
					if(dp[x][1][0][1][0])
					{
						if((a+e+1)%10==w[x])dp[x+1][(a+e+1)/10][0][1][0]=dp[x+1][(a+e+1)/10][0][1][1]=dp[x+1][(a+e+1)/10][1][1][0]=dp[x+1][(a+e+1)/10][1][1][1]=1;
						if((a+f+1)%10==w[x])dp[x+1][(a+f+1)/10][0][1][0]=dp[x+1][(a+f+1)/10][0][1][1]=dp[x+1][(a+f+1)/10][1][1][0]=dp[x+1][(a+f+1)/10][1][1][1]=1;
						if((b+e+1)%10==w[x])dp[x+1][(b+e+1)/10][0][1][0]=dp[x+1][(b+e+1)/10][0][1][1]=dp[x+1][(b+e+1)/10][1][1][0]=dp[x+1][(b+e+1)/10][1][1][1]=1;
						if((b+f+1)%10==w[x])dp[x+1][(b+f+1)/10][0][1][0]=dp[x+1][(b+f+1)/10][0][1][1]=dp[x+1][(b+f+1)/10][1][1][0]=dp[x+1][(b+f+1)/10][1][1][1]=1;
					}
					if(dp[x][2][0][1][0])
					{
						if((a+e+2)%10==w[x])dp[x+1][(a+e+2)/10][0][1][0]=dp[x+1][(a+e+2)/10][0][1][1]=dp[x+1][(a+e+2)/10][1][1][0]=dp[x+1][(a+e+2)/10][1][1][1]=1;
						if((a+f+2)%10==w[x])dp[x+1][(a+f+2)/10][0][1][0]=dp[x+1][(a+f+2)/10][0][1][1]=dp[x+1][(a+f+2)/10][1][1][0]=dp[x+1][(a+f+2)/10][1][1][1]=1;
						if((b+e+2)%10==w[x])dp[x+1][(b+e+2)/10][0][1][0]=dp[x+1][(b+e+2)/10][0][1][1]=dp[x+1][(b+e+2)/10][1][1][0]=dp[x+1][(b+e+2)/10][1][1][1]=1;
						if((b+f+2)%10==w[x])dp[x+1][(b+f+2)/10][0][1][0]=dp[x+1][(b+f+2)/10][0][1][1]=dp[x+1][(b+f+2)/10][1][1][0]=dp[x+1][(b+f+2)/10][1][1][1]=1;
					}
					if(dp[x][0][1][0][0])
					{
						if((a+c)%10==w[x])dp[x+1][(a+c)/10][1][0][0]=dp[x+1][(a+c)/10][1][0][1]=dp[x+1][(a+c)/10][1][1][0]=dp[x+1][(a+c)/10][1][1][1]=1;
						if((a+d)%10==w[x])dp[x+1][(a+d)/10][1][0][0]=dp[x+1][(a+d)/10][1][0][1]=dp[x+1][(a+d)/10][1][1][0]=dp[x+1][(a+d)/10][1][1][1]=1;
						if((b+c)%10==w[x])dp[x+1][(b+c)/10][1][0][0]=dp[x+1][(b+c)/10][1][0][1]=dp[x+1][(b+c)/10][1][1][0]=dp[x+1][(b+c)/10][1][1][1]=1;
						if((b+d)%10==w[x])dp[x+1][(b+d)/10][1][0][0]=dp[x+1][(b+d)/10][1][0][1]=dp[x+1][(b+d)/10][1][1][0]=dp[x+1][(b+d)/10][1][1][1]=1;
					}
					if(dp[x][1][1][0][0])
					{
						if((a+c+1)%10==w[x])dp[x+1][(a+c+1)/10][1][0][0]=dp[x+1][(a+c+1)/10][1][0][1]=dp[x+1][(a+c+1)/10][1][1][0]=dp[x+1][(a+c+1)/10][1][1][1]=1;
						if((a+d+1)%10==w[x])dp[x+1][(a+d+1)/10][1][0][0]=dp[x+1][(a+d+1)/10][1][0][1]=dp[x+1][(a+d+1)/10][1][1][0]=dp[x+1][(a+d+1)/10][1][1][1]=1;
						if((b+c+1)%10==w[x])dp[x+1][(b+c+1)/10][1][0][0]=dp[x+1][(b+c+1)/10][1][0][1]=dp[x+1][(b+c+1)/10][1][1][0]=dp[x+1][(b+c+1)/10][1][1][1]=1;
						if((b+d+1)%10==w[x])dp[x+1][(b+d+1)/10][1][0][0]=dp[x+1][(b+d+1)/10][1][0][1]=dp[x+1][(b+d+1)/10][1][1][0]=dp[x+1][(b+d+1)/10][1][1][1]=1;
					}
					if(dp[x][2][1][0][0])
					{
						if((a+c+2)%10==w[x])dp[x+1][(a+c+2)/10][1][0][0]=dp[x+1][(a+c+2)/10][1][0][1]=dp[x+1][(a+c+2)/10][1][1][0]=dp[x+1][(a+c+2)/10][1][1][1]=1;
						if((a+d+2)%10==w[x])dp[x+1][(a+d+2)/10][1][0][0]=dp[x+1][(a+d+2)/10][1][0][1]=dp[x+1][(a+d+2)/10][1][1][0]=dp[x+1][(a+d+2)/10][1][1][1]=1;
						if((b+c+2)%10==w[x])dp[x+1][(b+c+2)/10][1][0][0]=dp[x+1][(b+c+2)/10][1][0][1]=dp[x+1][(b+c+2)/10][1][1][0]=dp[x+1][(b+c+2)/10][1][1][1]=1;
						if((b+d+2)%10==w[x])dp[x+1][(b+d+2)/10][1][0][0]=dp[x+1][(b+d+2)/10][1][0][1]=dp[x+1][(b+d+2)/10][1][1][0]=dp[x+1][(b+d+2)/10][1][1][1]=1;
					}
					if(dp[x][0][0][1][1])
					{
						if(e==w[x])dp[x+1][0][0][1][1]=dp[x+1][0][1][1][1]=1;
						if(f==w[x])dp[x+1][0][0][1][1]=dp[x+1][0][1][1][1]=1;
					}
					if(dp[x][1][0][1][1])
					{
						if((e+1)%10==w[x])dp[x+1][(e+1)/10][0][1][1]=dp[x+1][(e+1)/10][1][1][1]=1;
						if((f+1)%10==w[x])dp[x+1][(f+1)/10][0][1][1]=dp[x+1][(f+1)/10][1][1][1]=1;
					}
					if(dp[x][2][0][1][1])
					{
						if((e+2)%10==w[x])dp[x+1][(e+2)/10][0][1][1]=dp[x+1][(e+2)/10][1][1][1]=1;
						if((f+2)%10==w[x])dp[x+1][(f+2)/10][0][1][1]=dp[x+1][(f+2)/10][1][1][1]=1;
					}
					if(dp[x][0][1][0][1])
					{
						if(c==w[x])dp[x+1][0][1][0][1]=dp[x][0][1][1][1]=1;
						if(d==w[x])dp[x+1][0][1][0][1]=dp[x][0][1][1][1]=1;
					}
					if(dp[x][1][1][0][1])
					{
						if((c+1)%10==w[x])dp[x][(c+1)/10][1][0][1]=dp[x][(c+1)/10][1][1][1]=1;
						if((d+1)%10==w[x])dp[x][(d+1)/10][1][0][1]=dp[x][(d+1)/10][1][1][1]=1;
					}
					if(dp[x][2][1][0][1])
					{
						if((c+2)%10==w[x])dp[x][(c+2)/10][1][0][1]=dp[x][(c+2)/10][1][1][1]=1;
						if((d+2)%10==w[x])dp[x][(d+2)/10][1][0][1]=dp[x][(d+2)/10][1][1][1]=1;
					}
					if(dp[x][0][1][1][0])
					{
						if(a==w[x])dp[x][0][1][1][0]=dp[x][0][1][1][1]=1;
						if(b==w[x])dp[x][0][1][1][0]=dp[x][0][1][1][1]=1;
					}
					if(dp[x][1][1][1][0])
					{
						if((a+1)%10==w[x])dp[x][(a+1)/10][1][1][0]=dp[x][(a+1)/10][1][1][1]=1;
						if((b+1)%10==w[x])dp[x][(b+1)/10][1][1][0]=dp[x][(b+1)/10][1][1][1]=1;
					}
					if(dp[x][2][1][1][0])
					{
						if((a+2)%10==w[x])dp[x][(a+2)/10][1][1][0]=dp[x][(a+2)/10][1][1][1]=1;
						if((b+2)%10==w[x])dp[x][(b+2)/10][1][1][0]=dp[x][(b+2)/10][1][1][1]=1;
					}
					if(dp[x][0][1][1][1]&&w[x]==0)dp[x+1][0][1][1][1]=1;
					if(dp[x][1][1][1][1]&&w[x]==1)dp[x+1][0][1][1][1]=1;
					if(dp[x][2][1][1][1]&&w[x]==2)dp[x+1][0][1][1][1]=1;
				}
				if(dp[s+1][0][0][0][0])return 3;
				if(dp[s+1][0][0][0][1])return 3;
				if(dp[s+1][0][0][1][0])return 3;
				if(dp[s+1][0][0][1][1])return 3;
				if(dp[s+1][0][1][0][0])return 3;
				if(dp[s+1][0][1][0][1])return 3;
				if(dp[s+1][0][1][1][0])return 3;
				if(dp[s+1][0][1][1][1])return 3;
			}
		}
	}
	return 4;
}
int main()
{
	int T;scanf("%d",&T);
	pre_work();
	while(T--)
	{
		long long x;
		scanf("%lld",&x);s=0;
		while(x){w[++s]=x%10;x/=10;}
		printf("%d\n",ask());
	}
	return 0;
}


rp++

原文地址:https://www.cnblogs.com/wzc521/p/11824193.html

时间: 2024-10-04 03:44:15

[CSP-S模拟测试]:小L的数(数位DP+模拟)的相关文章

[CSP-S模拟测试]:简单的填数(贪心+模拟)

题目描述 对于一个长度为$n$,且下标从$1$开始编号的序列$a$,我们定义它是「合法的」,当且仅当它满足以下条件:·$a_1=1$·对于$i\in [1,n),a_i\leqslant a_{i+1}\leqslant a_i+1$且$a_{i+1}$为正整数·对于任意在$a$中出现过的数$v$,记它的出现次数为$s$,则$2\leqslant s\leqslant 5$给定一个长度为$n$的序列$a$,其中有一些位置为$0$,你需要在这些位置上任意填数,使得$a$成为一个合法的序列,并且最大

uestc250windy数数位dp

#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #include <cstdlib> #include <list> #include <

USETC 250 windy数 数位DP

注意处理数字只有一位的情况(其实不用怎么处理)= = 简单数位DP #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #include <cstdlib> #

【BZOJ-1026】windy数 数位DP

1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5230  Solved: 2353[Submit][Status][Discuss] Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? Input 包含两个整数,A B. Output 一个整数 Sample I

hdu3652(含有13且能被13整除的数)数位DP基础

B-number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3257    Accepted Submission(s): 1819 Problem Description A wqb-number, or B-number for short, is a non-negative integer whose decimal for

bzoj 1026 [SCOI2009]windy数 数位dp

1026: [SCOI2009]windy数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=1026 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? Input 包含两个整数,A B. Output 一个整数.

bzoj 1026 windy数(数位DP)

1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 2615  Solved: 1155 [Submit][Status] Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? Input 包含两个整数,A B. Output 一个整数. Sample Input [

【10.17校内测试】【二维数位DP】【博弈论/预处理】【玄学(?)DP】

Solution 几乎是秒想到的水题叻! 异或很容易想到每一位单独做贡献,所以我们需要统计的是区间内每一位上做的贡献,就是统计区间内每一位是1的数的数量. 所以就写数位dp辣!(昨天才做了数字统计不要太作弊啊!) Code #include<bits/stdc++.h> #define LL long long #define mod 1000000007 using namespace std; inline void read(LL &x) { x = 0; char ch = g

LUOGU P3413 SAC#1 - 萌数(数位dp)

传送门 解题思路 首先这道题如果有两个以上长度的回文串,那么就一定有三个或两个的回文串,所以只需要记录一下上一位和上上位填的数字就行了.数位\(dp\),用记忆化搜索来实现.设\(f[i][j][k][0/1]\)表示填到了第\(i\)位,上上位数字为\(j\),上一位数字为\(k\),\(0/1\)表示有没有出现过回文串的方案数.\(dfs\)里在套路的传一个这一位有没有限制和前导0,细节还是比较多的. 代码 #include<iostream> #include<cstdio>