Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:呕的要吐。。%lld把我wa了5次,用标程生成随机数对比没找到错,把输入改成%I64d就0ms AC了。。汗~~~~In Reply To:呕的要吐。。%lld把我wa了5次,用标程生成随机数对比没找到错,把输入改成%I64d就0ms AC了。。汗~~~~ Posted by:yzhw at 2009-02-11 14:51:21 # include <stdio.h> # include <stdbool.h> long long refer[21][21][2]; void start() { memset(refer,0,sizeof(refer)); refer[2][1][1]=1; refer[1][1][0]=1; refer[2][1][0]=0; refer[2][2][1]=0; refer[2][2][0]=1; int i,j,k; for(i=3;i<=20;i++) { for(j=1;j<=i;j++) { long long t2=0; for(k=j;k<=i-1;k++) t2+=refer[i-1][k][0]; refer[i][j][1]=t2; t2=0; for(k=1;k<j;k++) t2+=refer[i-1][k][1]; refer[i][j][0]=t2; } } } int cul(int num,bool data[]) { int i=0,j=1; for(j=1;;j++) { if(!data[j]) { i++; } if(i==num) { data[j]=1; return j; } } } int main() { start(); int test,i; scanf("%d",&test); for(i=1;i<=test;i++) { int num,j,k; long long pos; scanf("%d %I64d",&num,&pos); if(num==1) { printf("1\n"); continue; } int res[21]; long long total=0; int last; int chk; for(j=1;j<=num;j++) { if(total<pos) { last=j; chk=0; total+=refer[num][j][0]; } else break; if(total<pos) { last=j; chk=1; total+=refer[num][j][1]; } else break; } total-=refer[num][last][chk]; pos-=total; res[1]=last; for(j=num-1;j>=1;j--) { total=0; if(chk) { chk=0; for(k=last;k<=j;k++) { if(total<pos) { last=k; total+=refer[j][k][chk]; } else break; } } else { chk=1; int tlast=last; last=1; for(k=1;k<tlast;k++) { if(total<pos) { last=k; total+=refer[j][k][chk]; } else break; } } res[num-j+1]=last; if(total!=0) total-=refer[j][last][chk]; pos-=total; } bool final[21]; memset(final,0,sizeof(final)); for(j=1;j<=num;j++) printf("%d ",cul(res[j],final)); printf("\n"); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator