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;
    }
  • 相关阅读:
    syslog远程日志存储/514端口【转】
    干掉僵尸进程
    以太网,IP,TCP,UDP数据包分析【转】
    suricata 的安装编译
    libpcap详解【转】
    蛋疼的经历--wireshark不能启动的问题
    Ubuntu中root用户和user用户的相互切换[转载自93度的饼干]
    OSI七层与TCP/IP五层网络架构详解
    __cplusplus的用法(转)
    IPsec ISAKMP(转)
  • 原文地址:https://www.cnblogs.com/calmwithdream/p/5876110.html
Copyright © 2011-2022 走看看