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

3 4 5 1 1 1 1 2 2 2 3 4 3

Sample Output

90

HINT

样例解释

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<=109,m<=109,k<=105,1<=y<=n,1<=x<=m

233333

我一直WA10%...

后来才发现忘记加模再取模了...

嘿嘿嘿,不过还是A了...

快速幂,简单

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
#define mod 1000000007
long long n,m,k,cha[];
long long x,sum;
struct node
{
long long x,y;
}a[];
int cmp(node a,node b)
{
if(a.x==b.x)
{
return a.y<b.y;
}
return a.x<b.x;
}
long long mul(long long n,long long m)
{
long long ans=;
while(n!=)
{
if(n%==)
{
ans=ans+m;
ans=ans%mod;
}
n=n/;
m=m*;
m=m%mod;
}
return (ans+m)%mod;
}
long long quick(long long n,long long m)
{
long long ans=;
while(n!=)
{
if(n%==)
{
ans=mul(ans,m);
ans=ans%mod;
}
m=mul(m,m);
m=m%mod;
n=n/;
}
return ans;
}
int main()
{
scanf("%lld%lld%lld",&n,&m,&k);
if(n%==)
{
long long x1=((+n)/);
sum=mul(n,x1)%mod;
}else
{
long long x1=(n/);
sum=mul(n+,x1)%mod;
}
for(long long i=;i<=k;i++)
{
scanf("%lld%lld",&a[i].x,&a[i].y);
}
sort(a+,a+k+,cmp);
long long cnt=;
for(long long i=;i<=k;i++)
{
if(a[i].x!=a[i-].x)
{
cnt++;
cha[cnt]=sum;
}
if(a[i].y==a[i-].y&&a[i].x==a[i-].x)continue;
cha[cnt]=cha[cnt]-a[i].y;
cha[cnt]=((cha[cnt]%mod)+mod)%mod;
}
long long ans1=quick(m-cnt,sum);
for(long long i=;i<=cnt;i++)
{
ans1=(ans1*cha[i])%mod;
}
cout<<ans1<<endl;
}

最新文章

  1. 分页实现:Offset-Fetch
  2. SQL Server 多实例下的复制
  3. XtraBackup出现 Can't connect to local MySQL server through socket '/tmp/mysql.sock'
  4. zkw线段树详解
  5. REST风格URL
  6. Web app 的性能瓶颈与性能调优方法
  7. jquery ajax跨域请求详解
  8. http请求数据
  9. SAE flask及其扩展 bug指南
  10. Coppersmith-Winograd 算法
  11. memcpy造成其他变量值改变
  12. spring-mvc + shiro框架整合(sonne_game网站开发04)
  13. 数据库索引------Btree索引的使用限制
  14. php类中双冒号和-&gt;的区别
  15. 强化学习(十九) AlphaGo Zero强化学习原理
  16. 转:spring boot log4j2配置(使用log4j2.yml文件)---YAML 语言教程
  17. 类对象序列化为json串,json串反序列化为类对象
  18. Java8 新特性学习
  19. 在系统中使用Bean Validation验证参数
  20. 3.操作jQuery集合《jquery实战》

热门文章

  1. Ubuntu18.04教程
  2. js常用 弹出确认 取消对话框
  3. 大数据项目中的Oracle查询优化
  4. 排序算法入门之冒泡排序及其优化(java实现)
  5. Django 2.0 Release note阅读简记
  6. 苹果公司揭秘首批列入 Swift 源代码兼容性开源项目清单
  7. Ubuntu本地uwsgi配Django问题的解决
  8. SQL基本语句的优化10个原则
  9. SOFA 源码分析 —— 服务发布过程
  10. ambari安装集群下安装kafka manager