SSL2676 2017年8月10日提高组T1 数学(快速幂)
来源:互联网 发布:电压无功优化的目的 编辑:程序博客网 时间:2024/05/21 22:21
2017年8月10日提高组T1 数学
Description
小A得到了一个数列A,他告诉你这个数列中所有的A[i]都是1到n的自然数,并且告诉你对于一些A[i]不能取哪些值。无聊的你想要知道所有可能的数列的积的和。定义一个数列的积为这个数列所有数的乘机。由于答案太大,只要模10^9+7输出即可。
Input
第一行三个整数n,m,k,分别表示数列元素取值范围,数列长度以及限制的数量。
接下来k行每行两个正整数x,y,表示A[x]的值不可能是y。
Output
一行一个整数表示答案。如果连一种可能的数列都没有,就输出0即可。
分析:根据乘法分配律显然可得答案为序列中每个位置可能的值之和的积,对于有限制的位置直接算,没有限制的位置直接快速幂求即可。
代码
#include <cstdio>#include <algorithm>#define maxn 200000using namespace std;struct arr{ int x,y;}a[maxn];long long n,m,k;int so(arr p,arr q){ if (p.x==q.x) return p.y<q.y; return p.x<q.x;}long long power(long long u,long long v){ long long r=1,base=u; while(v) { if(v&1) r*=base; r%=1000000007; base*=base; base%=1000000007; v>>=1; } return r;}int main(){ freopen("math10.in","r",stdin); long long ans=1; scanf("%d%d%d",&n,&m,&k); for (int i=1;i<=k;i++) scanf("%d%d",&a[i].x,&a[i].y); sort(a+1,a+k+1,so); long long p=1; for (int i=1;i<=k;i++) { if (a[i].x!=a[i-1].x) { p%=1000000007; ans=(ans*p)%1000000007; p=n*(n+1)/2-a[i].y; m--; } if (a[i].x==a[i-1].x&&a[i].y!=a[i-1].y) p-=a[i].y; } p%=1000000007; ans=(ans*p)%1000000007; ans=(ans*power((n*(n+1)/2)%1000000007,m))%1000000007; printf("%lld",ans);}
阅读全文
0 0
- SSL2676 2017年8月10日提高组T1 数学(快速幂)
- 2017年8月10日提高组T1 数学
- 2017年8月10日提高组T1 数学
- 2017年8月10日提高组T1 数学
- 【SSLGZ 2676】2017年8月10日提高组T1 数学
- SSL2764 2017年10月8日提高组T1 didi(dp)
- 2017年8月8日提高组T1 作业
- 2017年8月8日提高组T1 作业
- 2017年8月8日提高组T1 作业
- 2017年8月7日提高组T1 呵呵
- 2017年8月7日提高组T1 呵呵
- 2017年8月7日提高组T1 呵呵
- 2017年8月7日提高组T1 根
- 2017年8月9日提高组T1 水题
- 2017年8月9日提高组T1 水题
- 2017年8月14日提高组T1 跳跃
- 2017年8月15日提高组T1 字符串
- 2017年8月14日提高组T1 跳跃
- H
- Python初步了解(三)
- 欢迎使用CSDN-markdown编辑器
- 用StringBuffer拼凑Json
- Java之網易云課堂_浙江大學翁凱_第一週編程作業
- SSL2676 2017年8月10日提高组T1 数学(快速幂)
- 2017 Multi-University Training Contest
- 大暴力 Function
- 数据挖掘导论笔记(1)
- iOS Mac本地服务器moco服务端并进行网络请求实战
- x86汇编程序基础
- Hive TopN+分组TopN
- ResourcePatternResolver
- HDU 2643 Rank