• [HAOI2012] 容易题[母函数]


    794. [HAOI2012] 容易题

    ★★☆   输入文件:easy.in   输出文件:easy.out   简单对比
    时间限制:1 s   内存限制:128 MB


    第一题:容易题(easy)

    时间限制:1

    输入:easy.in

    输出:easy.out

    问题描述

    为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下:

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

    输入

    第一行三个整数n,m,k分别表示数列元素的取值范围,数列元素个数,以及已知的限制条数。

    接下来k行,每行两个正整数x,y表示A[x]的值不能是y

    输出

    一行一个整数表示所有可能的数列的积的和对1000000007取模后的结果。如果一个合法的数列都没有,答案输出0

    样例输入

    3 4 5

    1 1

    1 1

    2 2

    2 3

    4 3

    样例输出

    90

    样例解释

    A[1]不能取1

    A[2]不能去23

    A[4]不能取3

    所以可能的数列有以下12

    数列      积

    2 1 1 1     2

    2 1 1 2     4

    2 1 2 1     4

    2 1 2 2     8

    2 1 3 1     6

    2 1 3 2     12

    3 1 1 1     3

    3 1 1 2     6

    3 1 2 1     6

    3 1 2 2     12

    3 1 3 1     9

    3 1 3 2     18

    数据范围

    30%的数据n<=4,m<=10,k<=10

    另有20%的数据k=0

    70%的数据n<=1000,m<=1000,k<=1000

    100%的数据 n<=109,m<=109,k<=105,1<=y<=n,1<=x<=m

    显示代码纯文本
    1. /*
    2. 题解抄的别人的。表示对母函数一脸懵逼。。。
    3. 首先考虑暴力…(20分~~)…然后你会得到一堆式子,从前往后合并同类项,可以发现顺序无所谓,可以先算m-1个的再算m个的。
    4. 然后显然答案就是π(i=1~m)Σ(所有可行的)a[i]
    5. 虽然m很大,但是k只有1e5,所有许多位置可以全选,把没有限制的部分直接一起算就行了
    6. */
    7. #include<cstdio>
    8. #include<iostream>
    9. #include<algorithm>
    10. #define pir pair<int,int>
    11. using namespace std;
    12. typedef long long ll;
    13. const int N=1e5+5;
    14. const int mod=1e9+7;
    15. int n,m,val,tn,tmp;
    16. pir f[N];
    17. inline int read(){
    18. int x=0,f=1;char ch=getchar();
    19. while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    20. while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    21. return x*f;
    22. }
    23. ll fpow(ll a,ll p){
    24. ll res=1;
    25. for(;p;p>>=1,a=a*a%mod) if(p&1) res=res*a%mod;
    26. return res;
    27. }
    28. int main(){
    29. freopen("easy.in","r",stdin);
    30. freopen("easy.out","w",stdout);
    31. val=read();n=read();m=read();
    32. int all=1LL*val*(val+1)/2%mod;
    33. int ans=1;
    34. for(int i=1,a,b;i<=m;i++) a=read(),b=read(),f[i]=make_pair(a,b);
    35. sort(f+1,f+m+1);
    36. m=unique(f+1,f+m+1)-(f+1);
    37. for(int i=1;i<=m;i++){
    38. tmp+=f[i].second;
    39. if(i==m||f[i].first!=f[i+1].first){
    40. ans=1LL*ans*(all-tmp)%mod;
    41. tmp=0;tn++;
    42. }
    43. }
    44. ans=1LL*ans*fpow(all,n-tn)%mod;
    45. if(ans<0) ans+=mod;
    46. printf("%d",ans);
    47. return 0;
    48. }
  • 相关阅读:
    如何解决使用webpack打包之后,font-awsome路径不对的问题,终极解决方法
    vue-route+webpack部署单页路由项目,访问刷新出现404问题
    vue2.0打包webpack出错
    Coding Pages jekyll 404无法找到静态文件(css,js )
    git常用命令及分支简介
    【git常见问题】fatal: Not a valid object name: 'master'.
    jekyll下载了模版运行出现问题cannot load such file -- jekyll-paginate (LoadError)
    Jekyll解决Deprecation: but you haven't included the `jekyll-paginate` gem
    06四则运算3
    09NABCD需求分析
  • 原文地址:https://www.cnblogs.com/shenben/p/6545026.html
Copyright © 2020-2023  润新知