NC19989 [HAOI2012]容易题(EASY)
题目
题目描述
为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下:
有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定义一个数列的积为该数列所有元素的乘积,要求你求出所有可能的数列的积的和 mod 1000000007的值,是不是很简单呢?呵呵!
输入描述
第一行三个整数n,m,k分别表示数列元素的取值范围,数列元素个数,以及已知的限制条数。
接下来k行,每行两个正整数x,y表示A[x]的值不能是y。
输出描述
一行一个整数表示所有可能的数列的积的和对1000000007取模后的结果。如果一个合法的数列都没有,答案输出0。
示例1
输入
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
备注
30%的数据 \(n \le 4,m \le 10,k \le 10\)
另有20%的数据 \({k=0}\)
70%的数据 \(n \le 1000,m \le 1000,k \le 1000\)
100%的数据 \(n \le 10^9,m \le 10^9,k \le 10^5,1 \le y \le n,1 \le x \le m\)
题解
知识点:组合数学。
因为是求乘积的总和,我们可以利用分配律,把式子等价变换成每个数字可能值的和(贡献)的乘积。
这是对含有分配律的式子的常见处理方式,比较典型的就是乘法对加法的分配律。当然,还有对纯加法,利用交换律的分组求和,比较典型的就是在处理子区间异或和之和问题中的拆位优化,对每位分组一并处理。
因此,如果都没有限制,那么总和应该为 \(\displaystyle \prod_{i=1}^m \sum_{j=1}^n j = \prod_{i=1}^m \frac{n(n+1)}{2} = \left( \frac{n(n+1)}{2} \right)^m\) 。
考虑加上约束,那么就是给某些数的贡献减去约束值的和 \(sum\) ,那么它们的贡献就为 \(\dfrac{n(n+1)}{2} - sum\) 。
时间复杂度 \(O(k \log k + \log m)\)
空间复杂度 \(O(k)\)
代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int P = 1e9 + 7;
int qpow(int a, ll k) {
int ans = 1;
while (k) {
if (k & 1) ans = 1LL * ans * a % P;
k >>= 1;
a = 1LL * a * a % P;
}
return ans;
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, m, k;
cin >> n >> m >> k;
map<int, set<int>> mp;
for (int i = 1;i <= k;i++) {
int x, y;
cin >> x >> y;
mp[x].insert(y);
}
int ans = 1;
for (auto [x, st] : mp) {
int sum = 0;
for (auto y : st) (sum += y) %= P;
ans = 1LL * ans * (1LL * n * (n + 1) / 2 % P - sum + P) % P;
}
ans = 1LL * ans * qpow(1LL * n * (n + 1) / 2 % P, m - mp.size()) % P;
cout << ans << '\n';
return 0;
}
NC19989 [HAOI2012]容易题(EASY)的更多相关文章
- BZOJ 2751: [HAOI2012]容易题(easy) 数学
2751: [HAOI2012]容易题(easy) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2751 Description 为了使 ...
- BZOJ2751: [HAOI2012]容易题(easy)
2751: [HAOI2012]容易题(easy) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 872 Solved: 377[Submit][S ...
- BZOJ 2751: [HAOI2012]容易题(easy)( )
有限制的最多就K个, 所以我们处理一下这K个就行了. 其他可以任选, 贡献都是∑i (1≤i≤N), 用快速幂. ------------------------------------------- ...
- 2751: [HAOI2012]容易题(easy)
2751: [HAOI2012]容易题(easy) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1087 Solved: 477[Submit][ ...
- 【bzoj2751】[HAOI2012]容易题(easy) 数论-快速幂
[bzoj2751][HAOI2012]容易题(easy) 先考虑k=0的情况 那么第一个元素可能为[1,n] 如果序列长度为m-1时的答案是ans[m-1] 那么合并得 然后同理答案就是 k很小 而 ...
- 【bzoj2751】[HAOI2012]容易题(easy) 数论,简单题
Description 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下:有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪 ...
- 2018.11.07 bzoj2751: [HAOI2012]容易题(easy)(组合数学)
传送门 组合数学一眼题. 感觉一直做这种题智商会降低. 利用组合数学的分步计数原理. 只用关心每个数不被限制的取值的总和然后乘起来就可以了. 对于大部分数都不会被限制,总和都是n(n+1)2\frac ...
- bzoj 2751 [HAOI2012]容易题(easy)(数学)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2751 [题意] m个位置,已知每个位置的可能取值,问所有可能情况的每个位置的乘积的和. ...
- BZOJ 2751 容易题(easy) 快速幂+快速乘
2751: [HAOI2012]容易题(easy) Description 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下:有一个数列A已知对于所有的A[i] ...
- [HAOI2012] 容易题[母函数]
794. [HAOI2012] 容易题 ★★☆ 输入文件:easy.in 输出文件:easy.out 简单对比时间限制:1 s 内存限制:128 MB 秒 输入:easy.in 输出: ...
随机推荐
- Blazor模式讲解
Blazor的三种模式 Blazor Server: Blazor Server在 ASP.NET Core 应用中支持在服务器上托管 Razor 组件. 可通过 SignalR 连接处理 UI 更新 ...
- QT启动问题--找不到python36.dll-cnblog
1.报错:找不到python36.dll 2.解决 通过该查询CSDN下载相应的python36.dll放到C:\Windows\System32目录下即可 https://blog.csdn.net ...
- DataGrip连接MySql数据库失败:dataGrip java.net.ConnectException: Connection refused: connect.
1.问题 报错:dataGrip java.net.ConnectException: Connection refused: connect. 详细错误:[08S01] Communications ...
- 【BAT】递归替换文件后缀
@echo off set /p src_suffix=please input origin suffix: set /p des_suffix=please input target suffix ...
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2024.01.23)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- cancal报错 config dir not found
替换classpath中间封号两边的值
- [转帖]ck的离线安装
下载 下载地址: https://repo.clickhouse.tech/tgz/stable/ 下载的包: clickhouse-common-static clickhouse-server c ...
- [转帖]Linux三剑客之sed的初阶使用
https://www.jianshu.com/p/ceea435635a2 大多数情况下,对于文件内容的修改需要依赖交互式的软件来实现,例如vim修改文件的内容则是依赖光标的移动和修改操作来完成对文 ...
- 周末拾遗 xsos 的学习与使用
周末拾遗 xsos 的学习与使用 摘要 周末陪儿子上跆拳道课. 自己一个人傻乎乎的开着笔记本想着学习点东西. 上午看到了一个sosreport的工具. 本来想学习一下. 发现xsos 应该是更好的一个 ...
- [转帖]ssh时不输入YES
vim /etc/ssh/ssh_config 60行新添加 StrictHostKeyChecking no