以下是引用crackerwang在2007-5-30 12:12:07的发言:
昨天晚上想出来的的.感觉还是没有Eastsun的思路强.看来我DP还是没有学会
其实我用的不是DP,呵呵
My Blog→" target="_blank">Click Me
昨天晚上想出来的的.感觉还是没有Eastsun的思路强.看来我DP还是没有学会
其实我用的不是DP,呵呵
ps: zju1222也是个与阶乘有关的题,难度比上面几个大得多,有兴趣的可以做做~
100行?没这么夸张吧,
这是我写的代码:
#include<stdio.h>
#include<stdlib.h>
int m2[]={1,4}, m4[] ={1,2,4,3};
int lsr(char buf[],int* start,int end){
int s=*start,t =0,tt;
if(*start>end) return -1;
while(s<=end){
tt=buf[s];
buf[s]=(tt+t)/5;
t= ((tt+t)%5)*10;
s++;
}
while(!buf[*start]&&*start<=end+1) (*start)++;
return t/10;
}
int solve(char buf[],int length){
int start=0,n1=0,n2=0,k=0,mod,m;
if(length==1&&buf[0]<=1) return 1;
while((mod=lsr(buf,&start,length-1))>=0){
n2+=mod*k;
if(mod==2) n2++;
if(mod==4) n1++;
k++;
}
m= m2[n1%2]*m4[n2%4]%5;
return m&1?m+5:m;
}
main(){
char buf[200];
int k,len;
while(scanf(\"%s\",buf)!=EOF){
len =strlen(buf);
for(k=0;k<len;k++) buf[k]-='0';
printf(\"%d\n\",solve(buf,len));
}
return 0;
}