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了很多次的代码,有待以后改正!!

你可能感兴趣的:(poj)