bzoj2751 [HAOI2012]容易题(easy)
Description
为了使得大家高兴,小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
1 1
1 1
2 2
2 3
4 3
Sample Output
样例解释
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
HINT
数据范围
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
首先易知答案就是每一个数的所有可以取的数之和乘在一起
即
然后因为限制很小,就读进来排序+乱搞。然后因为m是10e,还要快速幂处理没有约束的
#include<cstdio>
#include<algorithm>
using namespace std;
#define LL long long
#define mod 1000000007
#define K 100010
struct lim{int x,y;
}l[K];
LL n,m,tot,ans=1,mul,tomul;
int k,cnt;
inline bool cmp(const lim &a,const lim &b)
{return a.x<b.x||a.x==b.x&&a.y<b.y;}
inline void quickpow(LL &ans,LL a,LL b)
{LL mult=a;while (b){if (b&1)ans=(ans*mult)%mod;mult=(mult*mult)%mod;b>>=1;}
}
inline LL read()
{LL x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
int main()
{n=read();m=read();k=read();mul=(n*(n+1)/2)%mod;LL x,y;for(int i=1;i<=k;i++){l[i].x=read();l[i].y=read();}sort(l+1,l+k+1,cmp);tot=m;tomul=mul-l[1].y;for (int i=2;i<=k;i++){if (l[i].x==l[i-1].x){if (l[i].y==l[i-1].y)continue;tomul-=l[i].y;}else{tot--;if (tomul<0)tomul=tomul%mod+mod;ans=(ans*tomul)%mod;tomul=mul-l[i].y;}}if (mul!=tomul){tot--;if (tomul<0)tomul=tomul%mod+mod;ans=(ans*tomul)%mod;}quickpow(ans,mul,tot);printf("%lld",ans);
}
转载于:https://www.cnblogs.com/zhber/p/4035929.html
bzoj2751 [HAOI2012]容易题(easy)相关推荐
- bzoj2751[HAOI2012]容易题(easy)
bzoj2751[HAOI2012]容易题(easy) 题意: 已知一个数列A对于所有的A[i]都是1~n的自然数,一些A[i]不能取一些值,求出所有可能的数列的积的和 mod 1000000007的 ...
- 【bzoj2751】[HAOI2012]容易题(easy) 数论-快速幂
[bzoj2751][HAOI2012]容易题(easy) 先考虑k=0的情况 那么第一个元素可能为[1,n] 如果序列长度为m-1时的答案是ans[m-1] 那么合并得 然后同理答案就是 k很小 而 ...
- bzoj 2751: [HAOI2012]容易题(easy)
2751: [HAOI2012]容易题(easy) Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2561 Solved: 1076 [Submi ...
- 【bzoj2751】[HAOI2012]容易题(easy) 数论,简单题
Description 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取 ...
- bzoj2751 [HAOI2012]容易题 数学
基本的数学原理,但似乎并没有这方面的直觉 这种计算方式是每一项乘每一项+起来 相当于 a*d+a*e+a*f+b*d+b*e+b*f+c*d+c*e+c*f =(a+b+c)*(d+e+f) 所以就 ...
- 2751: [HAOI2012]容易题(easy)
题目链接 题目大意:一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定义一个数列的积为该数列所有元素的乘积,求出所有可能的数列的积的和 题解:用小数据手玩 ...
- 小M的简单题(easy)
小M的简单题(easy) 时间限制:3s 内存限制:128MB [题目描述] 小M是某知名高中的学生,有一天,他请他的n个同学吃苹果,同学们排成一行,且手中已经有一些苹果.为了表示他的大方,有时他会给 ...
- 洛谷2220 [HAOI2012]容易题
标签:快速幂 题目 题目传送门 题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于 ...
- 洛谷 2220 [HAOI2012]容易题 题解(组合数学,离散化)
原链接: 洛谷:点我QωQ bzoj:点我QωQ 题意简述 一个长度为mmm的数列aaa,每个数都在[1,n][1,n][1,n]之间,有kkk个限制.第iii个限制包含两个正整数x,yx,yx,y, ...
最新文章
- 关于js中的this
- 类和对象—对象特性—空指针访问成员函数
- spring boot 异常设计原理
- 解决BDOC structure里header和data structure里数据格式不一致的问题
- Mysql查询结果只有一条的情况下把值赋值给变量,再用if else 流程判断
- Go database/sql 教程
- asp.net my sqlHelper
- 金蝶注册不了服务器,金蝶KIS专业版V10.0加密服务器无法注册?
- BootStrap之导航navigation
- XXX@1.0.0 build: `NODE_ENV=production webpack --config webpack.config.js`报错的解决
- sohu_news搜狐新闻类型分类
- 【Linux学习】信号——信号保存 | 信号处理 | 不可重入函数,volatile,SIGCHLD信号
- 在idea2021中遇到element tx:attributes is not allowed here的问题
- ​Vue 3 这个坑我踩了,你们一定要小心
- 时间间隔输出函数 python3
- 计算机科学核心知识体系
- Java反射系列--Type接口及其子接口
- 最大公约数的几种求解及代码实现
- 关于使用JavaPOI 导出Excel多级联动的一些方法
- 实时即未来,大数据项目车联网之项目基石与前瞻【一】
热门文章
- 苹果将在内华达州里诺市再购地块 都是为了它
- oracle EXP-00028
- 【高斯消元】bzoj1013 [JSOI2008]球形空间产生器sphere
- wpspbc按钮是什么意思_AC只是英文单词缩写,在科技领域常见的有三种意思
- svn回退到上一个版本_Git实用教程(一) | 为什么需要版本控制?(以嵌入式项目开发为例)...
- 小程序css之字体镂空
- 性能测试测试环境与生产环境_不在生产中测试? 在生产中进行测试!
- python使用redis_使用Python构建您的第一个Redis Hello World应用程序
- 应用迁移方案_Kubernetes如何成为迁移旧版应用程序的解决方案
- raspberry pi_如何进行Raspberry Pi聚会