题解:
第一维枚举长度,第二维枚举0~9 代表最后所有数字的最终状态。
当长度确定为i后,第一个数要想增加,操作的一定是区间1~i,
当第一个数满足后,操作第二个数时,不能在影响第一个数,
因此操作区间一定是2~i+1。
代码:
#include<bits/stdc++.h>
using namespace std;
char t[255];
int a[255],s[255];
int main()
{
int T;scanf("%d",&T);
while(T--)
{
scanf("%s",t+1);
int len=strlen(t+1);
bool bb=0;
for(int i=len;i>=1;i--)
{
for(int j=0;j<=9;j++)
{
for(int k=1;k<=len;k++)
a[k]=t[k]-'0';
memset(s,0,sizeof(s));
for(int k=1;k+i-1<=len;k++)
{
a[k]+=s[k-1]-s[max(k-i,0)];
a[k]%=10;
if(a[k]<j) s[k]=(s[k-1]+j-a[k]+10)%10;
else if(a[k]>j) s[k]=(s[k-1]+10-a[k]+j+10)%10;
else s[k]=s[k-1];
s[k]%=10;
}
bool is=1;
for(int k=len-i+2;k<=len;k++)
{
a[k]=(a[k]+s[len-i+1]-s[max(k-i,0)]+10)%10;
if(a[k]!=j)is=0;
}
if(is)
{
printf("%d\n",i);
bb=1;break;
}
}
if(bb)break;
}
}
return 0;
}