我已经尝试了所遇到的this SPOJ question所有可能的测试用例,但我的代码仍未被接受。无法确定哪个测试用例失败了。 我已经考虑过零在输入中的情况。我也考虑了连续零的情况。
#include <stdio.h>
#include <string.h>
int main()
{
int n,i,ar[6010];
char str[6010];
unsigned long long int dp[6010];
while(1)
{
int flag=0;
scanf("%s",str);
if(str[0]=='0')
break;
for(i=0;str[i]!='\0';i++) //copy string to array
{
ar[i+1]=str[i]-'0';
}
n=i;
for(i=1;i<=n-1;i++) //checking for continous two zeroes
{
if(ar[i]==0&&ar[i+1]==0) flag=1;
if(ar[i]>2&&ar[i+1]==0)flag=1;
}
dp[1]=1;
if(ar[1]*10+ar[2]<=26&&ar[2]!=0)dp[2]=2;
else dp[2]=1;
if(ar[2]==0)dp[1]=0;
for(i=3;i<=n;i++)
{
if(ar[i]!=0)
{
dp[i]=dp[i-1];
if(ar[i-1]*10+ar[i]<=26)
{
dp[i]+=dp[i-2];
}
}
else
{
if(ar[i-2]*10+ar[i-1]<=26)
{
dp[i]=dp[i-2];
dp[i-1]=0;
}
else
{
dp[i]=dp[i-1];
dp[i-1]=0;
}
}
}
if(flag==0)
printf("%llu\n",dp[n]);
else
printf("0\n");
}
return 0;
}