题目大意

洛谷链接

有一个数列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]\)不能取\(2、3\)

\(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

思路

从一般到特殊,如果没有不能选的限制,因为每个元素可以把范围内每个数取到,可以得到结果是:

\(( \sum_{1\le k\le n}k)^m\)

然而题目中提到有些元素的有些取值取不到,那么对应的元素的总价值把这些取值都减去再乘进去就可以了。剩下的没有动的元素直接累乘,注意要用到快速幂。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=100000+5;
const long long mod=1e9+7;
map<pair<ll,ll>,ll> a;//学lc大佬用的pair...其实用结构体也可
map<ll,ll> b;
ll n,m,k,cnt;
ll vis[maxn]; ll qpow(ll now,ll x){//快速幂的板子
ll vis=now%mod,res=1;
while(x){
if(x&1){
res*=(vis%mod);
res%=mod;
}
vis*=(vis%mod);
vis%=mod;
x>>=1;
}
return res;
} int main(){
scanf("%lld%lld%lld",&n,&m,&k);
ll sum=(n+1)*n/2; for(ll i=1;i<=k;i++){
ll x,y;
scanf("%lld%lld",&x,&y);
if(!b[x])vis[++cnt]=x;
if(a[make_pair(x,y)])continue;//样例给出了重复限制,所以记一下
a[make_pair(x,y)]=1;
b[x]+=y;//记录限制的总和
} ll ans=1;
for(ll i=1;i<=cnt;i++){
ans*=(sum-b[vis[i]])%mod;
ans%=mod;
} printf("%lld\n",((ans%mod)*qpow(sum,m-cnt)%mod)%mod);
return 0;
}

【数论】HAOI2012 容易题的更多相关文章

  1. 【bzoj2751】[HAOI2012]容易题(easy) 数论-快速幂

    [bzoj2751][HAOI2012]容易题(easy) 先考虑k=0的情况 那么第一个元素可能为[1,n] 如果序列长度为m-1时的答案是ans[m-1] 那么合并得 然后同理答案就是 k很小 而 ...

  2. 洛谷 P2220 [HAOI2012]容易题 数论

    洛谷 P2220 [HAOI2012]容易题 题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数 ...

  3. BZOJ 2751: [HAOI2012]容易题(easy) 数学

    2751: [HAOI2012]容易题(easy) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2751 Description 为了使 ...

  4. BZOJ2751: [HAOI2012]容易题(easy)

    2751: [HAOI2012]容易题(easy) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 872  Solved: 377[Submit][S ...

  5. BZOJ 2751: [HAOI2012]容易题(easy)( )

    有限制的最多就K个, 所以我们处理一下这K个就行了. 其他可以任选, 贡献都是∑i (1≤i≤N), 用快速幂. ------------------------------------------- ...

  6. 2751: [HAOI2012]容易题(easy)

    2751: [HAOI2012]容易题(easy) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1087  Solved: 477[Submit][ ...

  7. [HAOI2012] 容易题[母函数]

    794. [HAOI2012] 容易题 ★★☆   输入文件:easy.in   输出文件:easy.out   简单对比时间限制:1 s   内存限制:128 MB 秒 输入:easy.in 输出: ...

  8. 【bzoj2751】[HAOI2012]容易题(easy) 数论,简单题

    Description 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下:有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪 ...

  9. P2220 [HAOI2012]容易题[小学数学]

    题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定 ...

随机推荐

  1. jzoj 6797. 【2014广州市选day2】hanoi

    Description 你对经典的hanoi塔问题一定已经很熟悉了.有三根柱子,n个大小不一的圆盘,要求大盘不能压在小盘上,初始时n个圆盘都在第一根柱子上,最少要多少步才能挪到最后一根柱子上? 现在我 ...

  2. Aggressive cows(POJ 2456)

    原题如下: Aggressive cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20524   Accepted: ...

  3. ASP.NET Core 3.x启动时运行异步任务(一)

    这是一个大的题目,需要用几篇文章来说清楚.这是第一篇.   一.前言 在我们的项目中,有时候我们需要在应用程序启动前执行一些一次性的逻辑.比方说:验证配置的正确性.填充缓存.或者运行数据库清理/迁移等 ...

  4. python的运算符及数据类型的转换

    python 目录 python 1.算术运算符 2.比较运算符 3.赋值运算符和复合赋值运算符 4.位运算符 5.逻辑运算符 6.成员运算符 7.身份运算符 8.常见的数据类型转换 1.算术运算符 ...

  5. Java一键部署包,Linux部署不用愁!!!

    前言 昨天一哥们的弟弟突然问我有没有部署过的Linux,公司连个运维都没有,服务器都要后端部署.... 你有没有相似的遭遇呢?公司规模小,后端即是运维,一份工资干两份活,哈哈~ 为了解决这老弟的困惑, ...

  6. Redis Cluster集群架构实现

    Redis集群简介 通过前面三篇博客的介绍<Redis基础认识及常用命令使用(一)–技术流ken>,<Redis基础知识补充及持久化.备份介绍(二)–技术流ken>,<R ...

  7. Django request

    ''' 1.HttpRequest.GET 一个类似于字典的对象,包含 HTTP GET 的所有参数.详情请参考 QueryDict 对象. 2.HttpRequest.POST 一个类似于字典的对象 ...

  8. linux上部署springboot项目

    1.安装jdk,请参考个人博客linux安装jdk 2.安装mysql,请参考个人博客 linux安装mysql 3.项目打包(使用idea) 打开项目,点击idea右边Maven Projects菜 ...

  9. CentOS openssh升级到openssh-7.2版本

    查看现在的版本SSH -V 一.准备 备份ssh目录(重要) cp -rf /etc/ssh /etc/ssh.bak [ 可以现场处理的,不用设置 安装telnet,避免ssh升级出现问题,导致无法 ...

  10. PADS Layout VX.2.3 修改层名

    操作系统:Windows 10 x64 工具1:PADS Layout VX.2.3 点击菜单Setup > Layer Definition... 在Layers Setup窗口中,选择相应的 ...