【数论】HAOI2012 容易题
题目大意
洛谷链接
有一个数列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 容易题的更多相关文章
- 【bzoj2751】[HAOI2012]容易题(easy) 数论-快速幂
[bzoj2751][HAOI2012]容易题(easy) 先考虑k=0的情况 那么第一个元素可能为[1,n] 如果序列长度为m-1时的答案是ans[m-1] 那么合并得 然后同理答案就是 k很小 而 ...
- 洛谷 P2220 [HAOI2012]容易题 数论
洛谷 P2220 [HAOI2012]容易题 题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数 ...
- 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][ ...
- [HAOI2012] 容易题[母函数]
794. [HAOI2012] 容易题 ★★☆ 输入文件:easy.in 输出文件:easy.out 简单对比时间限制:1 s 内存限制:128 MB 秒 输入:easy.in 输出: ...
- 【bzoj2751】[HAOI2012]容易题(easy) 数论,简单题
Description 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下:有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪 ...
- P2220 [HAOI2012]容易题[小学数学]
题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定 ...
随机推荐
- odoo10甘特图gantt view
odoo10中的gantt图示例 1.Gantt属性说明 甘特图视图的根元素是<gantt />,它没有子节点但可以采用以下属性: date_start (required) 提供每条记录 ...
- [Leetcode]225. 用队列实现栈 、剑指 Offer 09. 用两个栈实现队列
##225. 用队列实现栈 如题 ###题解 在push时候搞点事情:push时入队1,在把队2的元素一个个入队1,再交换队2和队1,保持队1除pushguocheng 始终为空. ###代码 cla ...
- [程序员代码面试指南]递归和动态规划-最小编辑代价(DP)
问题描述 输入 原字符串StrOrg,目标字符串StrTarget,插入.删除.替换的编辑代价ic,dc,rc.输出将原字符串编辑成目标字符串的最小代价. 解题思路 状态表示 dp[i][j]表示把s ...
- 【深入理解Linux内核架构】3.2 (N)UMA模型中的内存组织
内核对一致和非一致内存访问系统使用相同的数据结构.在UMA系统上,只使用一个NUMA结点来管理整个系统内存.而内存管理的其他部分则相信他们是在处理一个伪NUMA系统. 3.2.1 概述 内存划分为结点 ...
- Linux常用命令详解(2)
aliasunaliasunamesuhostnamehistorywhichwcwwhowhoamipingkillseqdudffreedate 命令详解 1. alias 设置.’查看别名 实例 ...
- python的多种魔术方法
目录 new str & repr iter getitem.setitem.delitem getattr.setattr.delattr call slots 定制类和魔法方法 new s ...
- goto 无条件跳转
0. 基本模型 goto 顾言思义,是跳转的意思. goto 后接一个标签,这个标签的意义是告诉 Go程序下一步要执行哪里的代码. 所以这个标签如何放置,放置在哪里,是 goto 里最需要注意的. g ...
- Java中的常见锁(公平和非公平锁、可重入锁和不可重入锁、自旋锁、独占锁和共享锁)
公平和非公平锁 公平锁:是指多个线程按照申请的顺序来获取值.在并发环境中,每一个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个就占有锁,否者就会加入到等待队列中,以 ...
- [0CTF 2016]piapiapia(反序列逃逸)
我尝试了几种payload,发现有两种情况. 第一种:Invalid user name 第二种:Invalid user name or password 第一步想到的是盲注或者报错,因为fuzz一 ...
- 手撸Mysql原生语句--单表
select from where group by having order by limit 上面的所有操作是有执行的优先级的顺序的,我们将执行的过程可以总结为下面所示的七个步骤. 1.找到表:f ...