• 容易题(数论)


    容易题

    题目大意

    有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定义一个数列的积为该数列所有元素的乘积,要求你求出所有可能的数列的积的和mod 1000000007的值,是不是很简单呢?呵呵!

    solution

    容易题
    根据我们数学刚刚学的分步乘法原理
    没有限制的话那么总的方案数量((1+2+3+……+n)^m)
    记录一下不能取到的值的(tot)
    然后统计答案的时候把这个值换成({frac{(n(n-1))}{2}})(-tot)
    对于剩下的点(({frac{(n(n-1))}{2}})^{m-cnt})
    用快速幂预处理一下,然后累乘出结果就行了

    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #define int long long
    using namespace std;
    const int mod=1e9+7;
    const int maxn=100005;
    int sum[maxn];
    
    struct node{
        int x,y;
    }a[maxn];
    
    inline int read(){
        int x=0,w=1;
        char ch=getchar();
        for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;
        for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
        return x*w;
    }
    
    inline bool cmp(node a,node b){
        if(a.x==b.x)
            return a.y<b.y;
        else 
            return a.x<b.x;
    }
    
    inline int power(int x,int y,int mod){
        int res=1;
        while(y){
            if(y&1)
                res=res*x%mod;
            x=x*x%mod;
            y>>=1;
        }
        return res;
    }
    int n,m,k;
    
    signed main(){
        int ans=0;
        n=read(),m=read(),k=read();
        int sigma=(n*(n+1)>>1)%mod;
        for(int i=1;i<=k;i++)
            a[i].x=read(),a[i].y=read();
        sort(a+1,a+1+k,cmp);
        int cnt=0;
        for(int i=1;i<=k;i++){
            if(a[i].x!=a[i-1].x)
                sum[++cnt]=sigma;
            else
                if(a[i].y==a[i-1].y)
                    continue;
            sum[cnt]=(sum[cnt]-a[i].y+mod)%mod;
        }
        ans+=power(sigma,m-cnt,mod);
        for(int i=1;i<=cnt;i++)
            ans=(ans*sum[i]+mod)%mod;
        cout<<ans<<'
    ';
        return 0;
    }
    
  • 相关阅读:
    20200302 数据分析之numpy以及Jupyter
    20200228 scrapy高级使用及分布式
    20200226 请求库selenium
    20200224 爬虫-requests模块
    0219 请求上下文解析与g对象
    Matlab矩阵求导和求梯度有什么不同
    矩阵中范数的处理方式
    如何巧妙地使用递归
    遗传算法求最短路径
    nparray的维度和取值方式
  • 原文地址:https://www.cnblogs.com/rui-4825/p/12890294.html
Copyright © 2020-2023  润新知