zoukankan      html  css  js  c++  java
  • [USACO2011 Feb] Cow Line

    原题链接https://www.lydsy.com/JudgeOnline/problem.php?id=3301

    康拓展开和逆展开的模板题。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #define maxn 21
    using namespace std;
     
    inline int read(){
        register int x(0),f(1); register char c(getchar());
        while(c<'0'||'9'<c){ if(c=='-') f=-1; c=getchar(); }
        while('0'<=c&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
        return x*f;
    }
     
    long long mul[maxn];
    int n,m,num[maxn];
     
    inline void recontor(long long rank){
        bool vis[maxn]={0};
        rank--;
        for(register int i=1;i<=n;i++){
            int t=rank/mul[n-i],j;
            for(j=1;j<=n;j++) if(!vis[j]){
                if(t<=0) break;
                t--;
            }
            printf("%d ",j),vis[j]=true;
            rank%=mul[n-i];
        }
        puts("");
    }
    inline long long contor(){
        long long ans=1;
        for(register int i=1;i<=n;i++){
            int tot=0;
            for(register int j=i+1;j<=n;j++) if(num[i]>num[j]){
                tot++;
            }
            ans+=tot*mul[n-i];
        }
        return ans;
    }
     
    int main(){
        n=read(),m=read();
     
        mul[0]=1;
        for(register int i=1;i<=n;i++) mul[i]=mul[i-1]*i;
     
        for(register int i=1;i<=m;i++){
            char op; cin>>op;
            if(op=='P'){
                long long rank; scanf("%lld",&rank);
                recontor(rank);
            }else{
                for(register int i=1;i<=n;i++) num[i]=read();
                printf("%lld
    ",contor());
            }
        }
        return 0;
    }
    
  • 相关阅读:
    hdu 1978
    hdu 2700
    hdu 1176
    hdu 2390
    hdu 2707
    hdu 1804
    hdu 2703
    hdu 2572
    hdu 1171
    React有状态组件和无状态组件
  • 原文地址:https://www.cnblogs.com/akura/p/11309841.html
Copyright © 2011-2022 走看看