首页 > 其他分享 >BZOJ 2751([HAOI2012]容易题(easy)-暴力)

BZOJ 2751([HAOI2012]容易题(easy)-暴力)

时间:2022-10-24 18:06:45浏览次数:68  
标签:ch return HAOI2012 int ll 数列 easy 2751 define


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

样例解释

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

只要把没出现的先乘起来就行

#include<bits/stdc++.h> 
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,0x3f,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define MEMx(a,b) memset(a,b,sizeof(a));
#define INF (0x3f3f3f3f)
#define F (1000000007)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int>
#define pi pair<int,int>
#define SI(a) ((a).size())
#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \
For(j,m-1) cout<<a[i][j]<<' ';\
cout<<a[i][m]<<endl; \
}
#pragma comment(linker, "/STACK:102400000,102400000")
#define ALL(x) (x).begin(),(x).end()
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
int x=0,f=1; char ch=getchar();
while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
ll pow2(ll a,int b,ll p) //a^b mod p
{
if (b==0) return 1%p;
if (b==1) return a%p;
ll c=pow2(a,b/2,p)%p;
c=c*c%p;
if (b&1) c=c*a%p;
return c%p;
}
pair<ll,ll> a[112345];
int main()
{
// freopen("bzoj2751.in","r",stdin);
// freopen(".out","w",stdout);
ll n=read(),m=read(),k=read();
For(i,k) a[i].fi=read(),a[i].se=read();
sort(a+1,a+1+k);
k=unique(a+1,a+1+k)-a-1;
--m;
Fork(i,2,k) if (a[i].fi^a[i-1].fi) --m;
ll s=(ll)(1+n)*n/2%F;
ll ans=pow2(s,m,F);
ll c=a[1].se;
Fork(i,2,k) {
if (a[i].fi!=a[i-1].fi) {
ans=mul(ans,sub(s,c));
c=a[i].se;
} else c+=a[i].se;
}
ans=mul(ans,sub(s,c));
cout<<ans;
return 0;
}


标签:ch,return,HAOI2012,int,ll,数列,easy,2751,define
From: https://blog.51cto.com/u_15724837/5790743

相关文章

  • leetcode-509-easy
    FibonacciNumberTheFibonaccinumbers,commonlydenotedF(n)formasequence,calledtheFibonaccisequence,suchthateachnumberisthesumofthetwoprece......
  • leetcode-383-easy
    RansomNoteGiventwostringsransomNoteandmagazine,returntrueifransomNotecanbeconstructedbyusingthelettersfrommagazineandfalseotherwise.Ea......
  • leetcode-541-easy
    ReverseStringIIGivenastringsandanintegerk,reversethefirstkcharactersforevery2kcharacterscountingfromthestartofthestring.Iftherear......
  • leetcode-504-easy
    Base7Givenanintegernum,returnastringofitsbase7representation.Example1:Input:num=100Output:"202"Example2:Input:num=-7Output:"-10......
  • 开发那些事儿:EasyCVR时间组件报错,是什么原因?
    EasyCVR具备较强的视频能力,可支持海量设备接入、汇聚与管理、视频监控、视频录像、云存储、回放与检索、智能告警、平台级联等功能。平台可支持多协议接入,包括:国标GB/T2818......
  • D1. Balance (Easy version)
    D1.Balance(Easyversion)Thisistheeasyversionoftheproblem.Theonlydifferenceisthatinthisversionthereareno"remove"queries.Initiallyyouha......
  • easyExcel 填充模板生成新的excel
    POM<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency> 主要代......
  • Codeforces Round #830 C1. Sheikh(Easy version)
    题意给定一个长为\(n\)的非负整数序列\(\{a_n\}\),求\(l,r\)使\(f(l,r)=\text{sum}(l,r)-\text{xor}(l,r)\)最大,若答案不唯一,使\(r-l\)尽可能小,若仍不唯一,输出任意答案。......
  • leetcode-404-easy
    SumofLeftLeavesGiventherootofabinarytree,returnthesumofallleftleaves.Aleafisanodewithnochildren.Aleftleafisaleafthatisthele......
  • leetcode-455-easy
    AssignCookiesAssumeyouareanawesomeparentandwanttogiveyourchildrensomecookies.But,youshouldgiveeachchildatmostonecookie.Eachchildi......