P2220 [HAOI2012]容易题(快速幂)
Describe
为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下:
有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定义一个数列的积为该数列所有元素的乘积,要求你求出所有可能的数列的积的和 mod 1000000007的值,是不是很简单呢?呵呵!
Input
第一行三个整数n,m,k分别表示数列元素的取值范围,数列元素个数,以及已知的限制条数。
接下来k行,每行两个正整数x,y表示A[x]的值不能是y。
Output
一行一个整数表示所有可能的数列的积的和对1000000007取模后的结果。如果一个合法的数列都没有,答案输出0。
Sample Input
3 4 5
1 1
1 1
2 2
2 3
4 3
Sample Output
90
Explain
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
30%的数据n<=4,m<=10,k<=10
另有20%的数据k=0
70%的数据n<=1000,m<=1000,k<=1000
100%的数据 n<=10^9, m<=10^9, k<=10^5,1<=y<=n,1<=x<=m
Solution
首先我们想一下如果没有限制那么最后的结果是多少.对于数列中的每一项,我们都可以取1~n,共有m项,最后总结果其实挺整齐的,$(1+2+3+......+n) * (1+2+3+......n) *...... *(1+2+3+......n) $共乘m次,因为每个数都可以从每乘一次的数(1 ~ n)中选一个算出数列的积,最后相加,化简 \((1+2+3+4+......+n)^m\) ,也就是\(((1+n)*n/2)^m\) .可以看做用了分步乘法原理,共有m次方,也就是每个数对结果的贡献.
如果一个数被限制了,那么这个数所在的某一次方中就不是1 ~ n的加和了,要减去被限制的数,没有被限制的数还是1 ~ n加和,最后m个数遍历完,将m个得到的结果乘起来,就是最后结果了.
Attention
数据范围如此之大,快速幂!!!
注意取模,只要对结果没影响就取模.
去重边,样例中就有
Code
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <map>
#include <iostream>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
const ll Mod=1000000007;
map<pair<ll,ll>,ll> ma1;
map<ll,ll> ma2;
ll hj[maxn],n,m,k,js;
ll cf(ll now,ll zs){
ll jl=now%Mod,ans=1;
while(zs){
if(zs&1)ans=(ans*(jl%Mod))%Mod;
jl=(jl*(jl%Mod))%Mod;
zs>>=1;
}
return ans;
}
int main(){
scanf("%lld%lld%lld",&n,&m,&k);
for(ll i=1;i<=k;++i){
ll x,y;
scanf("%lld%lld",&x,&y);
if(!ma2[x]) hj[++js]=x;
if(ma1[make_pair(x,y)])continue;
ma1[make_pair(x,y)]=1;
ma2[x]+=y;
}
ll ans=1,cj=(n+1)*n/2;
for(ll i=1;i<=js;++i)
ans=(ans*((cj-ma2[hj[i]])%Mod))%Mod;
printf("%lld\n",(ans%Mod)*(cf(cj,m-js)%Mod)%Mod);
return 0;
}
hzoi
P2220 [HAOI2012]容易题(快速幂)的更多相关文章
- 洛谷 P2220 [HAOI2012]容易题 数论
洛谷 P2220 [HAOI2012]容易题 题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数 ...
- P2220 [HAOI2012]容易题【快速幂】
题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定 ...
- [LOJ#162]模板题-快速幂2
<题目链接> 注意:这可能也是一道模板题. 注意2:$p=998224352$ 注意3:对于$100\%$的数据,$n\leq 5 \times 10^6$ 这个题很启发思路,如果直接快速 ...
- P2220 [HAOI2012]容易题
传送门 首先 $(\sum_{i=1}^{n}a_i)(\sum_{i=1}^{m}b_i)$ 展开以后包含了所有 $ab$ 两两相乘的情况并且每种组合只出现一次 发现展开后刚好和题目对序列价值的定义 ...
- P2220 [HAOI2012]容易题[小学数学]
题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定 ...
- POJ 3641 Pseudoprime numbers (数论+快速幂)
题目链接:POJ 3641 Description Fermat's theorem states that for any prime number p and for any integer a ...
- 【bzoj2751】[HAOI2012]容易题(easy) 数论-快速幂
[bzoj2751][HAOI2012]容易题(easy) 先考虑k=0的情况 那么第一个元素可能为[1,n] 如果序列长度为m-1时的答案是ans[m-1] 那么合并得 然后同理答案就是 k很小 而 ...
- BZOJ 2751 容易题(easy) 快速幂+快速乘
2751: [HAOI2012]容易题(easy) Description 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下:有一个数列A已知对于所有的A[i] ...
- 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...
随机推荐
- VMware15 安装Mac 10.14系统/苹果系统
安装环境 Windows专业版 VMware Workstation Pro 15 所需资源 VMware Workstation Pro 15.0.0 Build 10134415 官网下载地址:h ...
- SQLyog-证书密钥
* 用户名: + 随意填写 * 秘钥: + b70d7f66-dac2-4462-bf51-c4e9347da763 + ccbfc13e-c31d-42ce-8939-3c7e63ed5417 + ...
- 14个快捷键让你的idea飞起来(新手向 + 演示)
本期盘点一下博主在工作中,常用的13个idea快捷键,这些快捷键基本涵盖了大部分的开发场景,希望可以萌新们的idea使用效率,系统为mac系统 上一步 / 下一步撤销 / 反撤销进入一个类生成方法变量 ...
- sql注入 pikachu
闭合条件的探测 数字型注入 burp抓包 分别测试 id=1 and 1=1和id=1 or 1=1 存在漏洞 字符型注入 ' 报错 探测闭合条件 ' order by 1# 未报错.构成闭合 同上有 ...
- beego微信网页授权
beego.Get("MP_verify_Rj3QAbcdU0MRsyS.txt", func(context *context.Context) { context.Respon ...
- ARP/RARP报文格式
arp协议 地址解析协议ARP(Address Resolution Protocol)是用来将IP地址解析为MAC地址的协议. arp格式: 一个字节等于8位 硬件类型:指明发送方想知道的硬件接口类 ...
- 结构体 偏移量 (size_t)&(((s *)0)->m) , list相关
在Windows SDK 的stddef.h 中 #define offsetof(s,m) (size_t)&(((s *)0)->m) 应用例如 #define list_conta ...
- WebRTC 及点对点网络通信机制
原文请查阅这里,略有删减,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 这是 JavaScript 工作原理第十八章. 概述 何为 WebRTC ?首先,字面上已经给出了关于 ...
- [故障解决]图文:windows apache无法启用 端口被占用
windows apache无法启用 端口被占用 1 XAMPP Error: Apache shutdown unexpectedly 无法启动apache,显示的log为: 2 查了一下端口, 通 ...
- Windows 怎么启动 apache
在可执行目录下找到httpd.exe命令,然后运行cmd,执行类似以下命令:C:\"Program Files"\"Apache Software Foundation& ...