2048-2049-2068 (完全错位)

//2048H - 神、上帝以及老天爷

#include<stdio.h>

#define L 20
int main()
{
    int i;
    long long f[L+1],g[L+1];
    long long an[L+1];
    int x,n;
    double y;
    f[1]=0;
    g[1]=1;
    for(i=2;i<=L;i++)
    {
        g[i]=(i-1)*g[i-1]+f[i-1];
        f[i]=(i-1)*g[i-1];
    }
    an[0]=1;
    for(i=1;i<=L;i++)
    {
        an[i]=an[i-1]*i;
    }
    scanf("%d",&n);
    for(;n>0;n--)
    {
        scanf("%d",&x);
        y=(double)f[x]/an[x]*100;
        printf("%.2lf%%\n",y);
    }
    return 0;
}

  

//2049I - 不容易系列之(4)——考新郎

#include<stdio.h>

#define L 20

long long chu(int i,int j,long long k)
{
    int x=i,y=j,z;
    while(1){
        x=x%y;
        if(x==0){
            z=y;
            break;
        }
        y=y%x;
        if(y==0){
            z=x;
            break;
        }
    }
    j/=z;
    i/=z;
    return (k/i*j);
}
int main()
{
    int i,j;
    long long f[L+1][L+1],g[L+1];
    f[0][0]=1;
    f[0][1]=0;
    g[1]=1;
    for(i=2;i<=L;i++){
        g[i]=(i-1)*g[i-1]+f[0][i-1];
        f[0][i]=(i-1)*g[i-1];
    }
    for(j=1;j<=L;j++){
        for(i=1;i<=j;i++){
            f[i][j]=chu(i,j,f[i-1][j-1]);
        }
    }
    int m,n;
    int c;
    scanf("%d",&c);
    for(;c>0;c--)
    {
        scanf("%d %d",&n,&m);
        printf("%lld\n",f[n-m][n]);
    }
    return 0;
}

  

2068H - RPG的错排

#include<stdio.h>

#define L 25
int main(){

    long long f[L/2]={0,0,1};
    for(int i=3;i<=L/2;i++)
        f[i]=(i-1)*(f[i-1]+f[i-2]);

    long long c[L+1][L+1];
    for(int i=0;i<=L;i++)
        c[i][0]=c[i][i]=1;
    for(int i=2;i<=L;i++)
        for(int j=1;j<=i/2;j++)
            c[i][i-j]=c[i][j]=c[i-1][j-1]+c[i-1][j];

    long long g[L+1];
    for(int i=1;i<=L;i++)
        g[i]=1;
    for(int i=1;i<=L;i++)
        for(int j=2;j<=i/2;j++)
            g[i]+=c[i][j]*f[j];

    int n;
    while(scanf("%d",&n)&&n)
        printf("%lld\n",g[n]);

    return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/lhl2019/p/12109131.html