您的位置:首页 > 其它

【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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: