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;
    }
  • 相关阅读:
    软件测试课堂练习1
    安卓增删改查
    安卓数据库表
    安卓注册登录
    安卓购物清单
    安卓计算器
    第四周安卓作业
    第七周作业
    jsp第六周
    第四次jsp作业
  • 原文地址:https://www.cnblogs.com/calmwithdream/p/5876110.html
Copyright © 2011-2022 走看看