POJ 1037 A decorative fence
#include<stdio.h> #include<string.h> char s[30]; bool flag[30]; int num; __int64 jc[30]={1}; void init(){ for(int i=1;i<20;i++) jc[i]=i*jc[i-1]; } void solve(int n,int k){ int i,j,t,temp; if(k==0) return ; temp=jc[k-1]; t=(n)/temp; if(n%temp==0) n++; for(j=0,i=1;i<=num;i++) if(!flag[i]){ if(j==t) break; j++; } if(i>num) i--; flag[i]=1; printf("%d ",i); solve((n)%temp,k-1); } int main() { int n,N; init(); scanf("%d",&N); while(N--){ scanf("%d%d",&num,&n); memset(flag,0,sizeof(flag)); solve(n-1,num); puts(""); } //while(1); return 0; }
先附上WA了很多次的代码,有待以后改正!!