zoukankan      html  css  js  c++  java
  • USACO 2011 February Silver Cow Line /// 康拓展开模板题 oj22713

    题目大意:

    输入n k,1-n的排列,k次操作

    操作P:输入一个m 输出第m个排列

    操作Q:输入一个排列 输出它是第几个排列

    Sample Input

    5 2
    P
    3
    Q
    1 2 5 3 4

    Sample Output

    1 2 4 3 5
    5

     
    康拓展开裸题 然而因为用了getchar(); 所以一直在超时
    康拓展开:http://www.cnblogs.com/dong008259/archive/2011/12/12/2283436.html
    #include <bits/stdc++.h>
    using namespace std;
    int n,a[25],b[25];
    long long int fac[25]={1,1,2,6,24,120,720,5040,40320,362880,3628800,
    39916800,479001600,6227020800,87178291200,1307674368000,20922789888000,
    355687428096000,6402373705728000,121645100408832000,2432902008176640000};
    void ops0()
    {
        long long sum=0;
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        for(int i=1;i<=n;i++)
        {
            int tem=0;
            for(int j=i+1;j<=n;j++)
                if(a[j]<a[i]) tem++;
            sum+=tem*fac[n-i];
        }
        printf("%lld
    ",sum+1);
    }
    void ops1()
    {
        long long m; scanf("%lld",&m); m--;
        for(int i=n-1;i>=0;i--)
        {
            int tem=m/fac[i];
            for(int j=0;j<=tem;j++)
                if(b[j]) tem++;
            if(i) printf("%d ",tem+1);
            else printf("%d",tem+1);
            b[tem]=1;
            m%=fac[i];
        }
        printf("
    ");
    }
    int main()
    {
        int k;
        while(~scanf("%d%d",&n,&k))
        {
            while(k--)
            {
                memset(b,0,sizeof(b));
                char ops; scanf(" %c",&ops);
                if(ops=='P') ops1();
                else ops0();
            }
            printf("
    ");
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    MySQL 简单查询(实验回顾)
    PicGo + Gitee 创建图床,Typora竟还有这种功能
    SQL 条件判断
    django ORM中的复选MultiSelectField的使用
    with的用法
    django update-or-create的用法
    获取异常文件
    支付宝支付
    单例模式创建
    数据类模型
  • 原文地址:https://www.cnblogs.com/zquzjx/p/8584285.html
Copyright © 2011-2022 走看看