【Peking University Online Judge】1189(钉子和小球)
2015-01-30 20:29
357 查看
#include<stdio.h> #include<math.h> int main(void){ int n,m; char c; while(scanf("%d %d",&n,&m)!=EOF){ char a[n*(n+1)/2]; __int64 b[(n+2)*(n+1)/2]; for(int i=0;i<n*(n+1)/2;i++){ while((c=getchar())=='\n'||c==' ') continue; a[i]=c; } for(int i=0;i<(n+2)*(n+1)/2;i++) b[i]=0; if(a[0]=='*') b[0]=1; else{ b[4]+=4; } for(int i=1;i<=n;i++){ b[i*(i+1)/2]+=b[i*(i-1)/2]; b[i*(i+1)/2+i]+=b[i*(i-1)/2+i-1]; for(int j=1;j<i;j++){ b[i*(i+1)/2+j]+=b[(i-1)*(i)/2+j]+b[(i-1)*(i)/2+j-1]; } if(i<=n-2){ for(int j=i*(i+1)/2;j<=i*(i+1)/2+i;j++){ if(a[j]!='*'){ b[j-i*(i+1)/2+(i+2)*(i+3)/2+1]+=b[j]*4; b[j]=0; } } } } if(b[n*(n+1)/2+m]!=0){ b[0]=pow(2,n); while(b[n*(n+1)/2+m]%2==0){ b[n*(n+1)/2+m]>>=1; b[0]>>=1; } } printf("%I64d/%I64d\n",b[n*(n+1)/2+m],b[0]); } return 0; }
相关文章推荐
- 【Peking University Online Judge】2453(An Easy Problem)
- 【Peking University Online Judge】3069(Saruman's Army)
- 【Peking University Online Judge】3253(Fence Repair)
- 【Peking University Online Judge】3617(Best Cow Line)
- 【Peking University Online Judge】1002 (487-3279)
- 【Peking University Online Judge】1003(Hangover)
- 【Peking University Online Judge】1004(Financial Management)
- 【Peking University Online Judge】1006(Biorhythms)
- 【Peking University Online Judge】1007(DNA Sorting)
- 【Peking University Online Judge】1008(Maya Calendar)
- 【Peking University Online Judge】1012(Joseph)
- 【Peking University Online Judge】1183(反正切函数的应用)
- 【Peking University Online Judge】1852(Ants)
- 【Peking University Online Judge】2431(Expedition)
- POJ 1189 钉子和小球(DP)
- HUNAN UNIVERSITY ACM/ICPC Judge Online —— Problem 10049 IP Address
- HUNAN UNIVERSITY ACM/ICPC Judge Online_Problem 10014_The Triangle
- POJ 1189 钉子和小球 思路+疑惑
- HUNAN UNIVERSITY ACM/ICPC Judge Online —— Problem 10038 Lowest Bit
- HUNAN UNIVERSITY ACM/ICPC Judge Online_Problem 10010_Recaman's Sequence