[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++
[CSP-S模拟测试]:小L的数(数位DP+模拟)的更多相关文章
- [CSP-S模拟测试]:简单的填数(贪心+模拟)
题目描述 对于一个长度为$n$,且下标从$1$开始编号的序列$a$,我们定义它是「合法的」,当且仅当它满足以下条件:·$a_1=1$·对于$i\in [1,n),a_i\leqslant a_{i+1 ...
- [CSP-S模拟测试]:小奇挖矿2(DP+赛瓦维斯特定理)
题目背景 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市场,以便为飞船升级无限非概率引擎. 题目描述 现在有$m+1$个星球,从左到右标号为$0$到$n$,小奇最初 ...
- 洛谷 - P2657 - windy数 - 数位dp
https://www.luogu.org/problemnew/show/P2657 不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. 这道题是个显然到不能再显然的数位dp了. 来个 ...
- 【BZOJ-1026】windy数 数位DP
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5230 Solved: 2353[Submit][Sta ...
- bzoj 1026 [SCOI2009]windy数 数位dp
1026: [SCOI2009]windy数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...
- k好数 数位dp
问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.13.20.22 ...
- bzoj 3530: [Sdoi2014]数数 数位dp
题目 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串.例如当S=(22,333,0233)时,233是幸运数,2333.20233.3223不是幸运数. ...
- hdu3652(含有13且能被13整除的数)数位DP基础
B-number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- BZOJ 3326 [SCOI2013]数数 (数位DP)
洛谷传送门 题目: Fish 是一条生活在海里的鱼,有一天他很无聊,就开始数数玩.他数数玩的具体规则是: 确定数数的进制$B$ 确定一个数数的区间$[L, R]$ 对于$[L, R] $间的每一个数, ...
随机推荐
- JDK8~13新特性概览
JDK8 1. 接口default 与 static 关键字 /** * jdk8中接口可以使用声明default和static修饰的方法 * static修饰的方法和普通的方法一样,可以被直接调用 ...
- windows下一步到位搭建pycharm的开发环境
pycharm的开发环境主要涉及到以下三个方面 pycharm的激活 这里采用破解的方式来达到永久激活的目的,因为激活码用着用着就过期的你,会发现不厌其烦的 通过测试,这个破解包适用于2017-201 ...
- Linux(17):Shell编程(4)
案例1:批量生成随机字 符 文件名案例 使用for 循环在 /neo 目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串 neo创建的结果名称示例 如下: [root ...
- 一款完美代替微信小程序原生客服消息的工具:
一.设置:无需开发,多种回复(自动+人工) 自动回复形式有3种: 打开客服消息(用户只要和客服互动过一次,再次点击进入,会收到设置好的自动回复) 关键词回复(用户在小程序中回复某个关键词内容时,会 ...
- workerman 实践 及 不能多人连接的问题
官网:https://www.workerman.net/ 手册地址:https://www.workerman.net/doc 追加内容: 请在开发前多读读 开发必读http://doc.worke ...
- 关于redis的几件小事(四)redis的过期策略以及内存淘汰机制
1.数据为什么会过期? 首先,要明白redis是用来做数据缓存的,不是用来做数据存储的(当然也可以当数据库用),所以数据时候过期的,过期的数据就不见了,过期主要有两种情况, ①在设置缓存数据时制定了过 ...
- 06 Django之模型层---多表操作
一 创建模型 表和表之间的关系 一对一.多对一.多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束. ...
- SQL-Serverの自動採番(IDENTITY値)の取得・リセット
システムに必要なテーブルで.自動的に番号を振っていくものが必要なときがあります. たとえば.各種の伝票データの伝票番号の様なものです. プログラム処理上.データを登録した直後に.自動採番された値を取得 ...
- echarts图表自适应盒子的大小(盒子的大小是动态改变的),大到需要全屏展示
项目中用到了echarts,并且页面是自适应的,且页面中有一个[放大.缩小]功能,因此图表还需要根据盒子的大小来变化. 即:两个需求,如下: ① 图表根据窗口的大小自适应 ② 图表根据所在盒子的大小自 ...
- k-means 非监督学习聚类算法
非监督学习 非监督学习没有历史样本数据和标签,直接对数据分析或得结果. k-means 使用 >>> from sklearn.cluster import KMeans >& ...