zoukankan      html  css  js  c++  java
  • 康拓展开-----两个排列的位置之差

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #define LL long long
    using namespace std;
    const int maxn=105;
    const int mod=1e6+7;
    
    int T,n,a[maxn],b[maxn];
    LL fac[maxn];
    int vis[maxn];
    
    void set(int high)
    {
        fac[0]=1;
        for(int i=1;i<=high;i++)
            fac[i]=(fac[i-1]*i)%mod;
    }
    
    void deal(int a[],LL &ans)
    {
        ans=0;
        memset(vis,0,sizeof(vis));
        for(int i=0;i<n;i++)
        {
            int cnt=0;
            for(int j=1;j<a[i];j++) if(!vis[j]) cnt++;
            ans=(ans+((cnt*fac[n-i-1])%mod))%mod;
            vis[a[i]]=1;
        }
    }
    int main()
    {
        set(100);
        int Case=1;
        cin>>T;
        while(T--)
        {
            cin>>n;
            for(int i=0;i<n;i++) cin>>a[i];
            for(int i=0;i<n;i++) cin>>b[i];
            LL p1=0,p2=0,ans=0;
            deal(a,p1);deal(b,p2);
    
            int i=0;
            for(i=0;i<n;i++) if(a[i]!=b[i]) break;
            if(a[i]>b[i]) ans=(p1-p2)%mod;
            else ans=(p2-p1)%mod;
            cout<<"Case $"<<Case++<<":"<<endl<<(ans+mod)%mod<<endl;
        }
        return 0;
    }
    
    
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #define LL long long
    using namespace std;
    const int maxn=105;
    const int mod=1e6+7;
    
    int T,n,a[maxn],b[maxn];
    LL fac[maxn];
    int vis[maxn];
    
    void set(int high)
    {
        fac[0]=1;
        for(int i=1;i<=high;i++)
            fac[i]=(fac[i-1]*i)%mod;
    }
    
    void deal(int a[],LL &ans)
    {
        ans=0;
        memset(vis,0,sizeof(vis));
        for(int i=0;i<n;i++)
        {
            int cnt=0;
            for(int j=1;j<a[i];j++) if(!vis[j]) cnt++;
            ans=(ans+((cnt*fac[n-i-1])%mod))%mod;
            vis[a[i]]=1;
        }
    }
    int main()
    {
        set(100);
        int Case=1;
        cin>>T;
        while(T--)
        {
            cin>>n;
            for(int i=0;i<n;i++) cin>>a[i];
            for(int i=0;i<n;i++) cin>>b[i];
            LL p1=0,p2=0,ans=0;
            deal(a,p1);deal(b,p2);
    
            int i=0;
            for(i=0;i<n;i++) if(a[i]!=b[i]) break;
            if(a[i]>b[i]) ans=(p1-p2)%mod;
            else ans=(p2-p1)%mod;
            cout<<"Case $"<<Case++<<":"<<endl<<(ans+mod)%mod<<endl;
        }
        return 0;
    }
  • 相关阅读:
    kettle结合MySQL生成保留最近6个月月度报告_20161009
    reduce用法
    【npm下载依赖包失败】gyp ERR! stack Error: EACCES: permission denied, mkdir问题解决方案
    【前端算法3】插入排序
    【前端算法2】快速排序
    【前端算法1】二分查找
    diy 滚动条 样式 ---- 核心代码
    [数据结构] 栈
    [数据结构] 列表
    day02 Python 运算符
  • 原文地址:https://www.cnblogs.com/calmwithdream/p/5876110.html
Copyright © 2011-2022 走看看