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;
    }
  • 相关阅读:
    SQL的update from 理解
    JS自动合并表格
    完全备份ORACLE数据库 并在另一台电脑上恢复
    cmd 连接到指定路径
    oracle 11g 64位安装sqldeveloper打开不了
    oracle 11g卸载方法
    sql的游标使用(转)
    JQEUERY案例
    sessionStorage实现note的功能
    Web Worker模拟抢票
  • 原文地址:https://www.cnblogs.com/calmwithdream/p/5876110.html
Copyright © 2011-2022 走看看