為了使得大家高興,小q特意出個自認為的簡單題(easy)來滿足大家,這道簡單題是描述如下:
有乙個數列a已知對於所有的a[i]都是1~n的自然數,並且知道對於一些a[i]不能取哪些值,我們定義乙個數列的積為該數列所有元素的乘積,要求你求出所有可能的數列的積的和 mod 1000000007的值,是不是很簡單呢?呵呵!
第一行三個整數n,m,k分別表示數列元素的取值範圍,數列元素個數,以及已知的限制條數。
接下來k行,每行兩個正整數x,y表示a[x]的值不能是y。
一行乙個整數表示所有可能的數列的積的和對1000000007取模後的結果。如果乙個合法的數列都沒有,答案輸出0。
輸入 #1複製
3 4 51 11 1
2 22 3
4 3
輸出 #1複製
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
30%的資料n<=4,m<=10,k<=10
另有20%的資料k=0
70%的資料n<=1000,m<=1000,k<=1000
100%的資料 n<=10^9,m<=10^9,k<=10^5,1<=y<=n,1<=x<=m
這個題就是把所有數加起來乘方,用一下求和公式就行
因為有限制,所以減去限制的值,乘方上邊減去有限制的個數。
最後把他們乘在一起就行。因為資料大,所以用快速冪優化。
#includeusingnamespace
std;
typedef
long
long
ll;const ll mod=1000000007
;const
int maxn=1e5+3
;map
,bool>inf;
mapsum;
ll n,m,k,js,num[maxn];
ll pow(ll a,ll x)
return ans%mod;
}int
main()
ll ans=1,max=(n+1)*n/2
;
for(ll i=1;i<=js;i++)
printf(
"%lld
",ans%mod*pow(max,m-js)%mod%mod);
return0;
}
P2220 HAOI2012 容易題 小學數學
有乙個數列a已知對於所有的a i 都是1 n的自然數,並且知道對於一些a i 不能取哪些值,我們定義乙個數列的積為該數列所有元素的乘積,要求你求出所有可能的數列的積的和 mod 1000000007的值,是不是很簡單呢?呵呵!標籤裡面數論是騙人的 霧 難道是因為有個取模嗎?這題還是很簡單的,首先觀察...
洛谷 2220 HAOI2012 容易題
題目描述 為了使得大家高興,小q特意出個自認為的簡單題 easy 來滿足大家,這道簡單題是描述如下 有乙個數列a已知對於所有的a i 都是1 n的自然數,並且知道對於一些a i 不能取哪些值,我們定義乙個數列的積為該數列所有元素的乘積,要求你求出所有可能的數列的積的和 mod 1000000007的...
數論 HAOI2012 容易題
問題描述 為了使得大家高興,小q特意出個自認為的簡單題 easy 來滿足大家,這道簡單題是描述如下 有乙個數列a已知對於所有的a i 都是1 n的自然數,並且知道對於一些a i 不能取哪些值,我們定義乙個數列的積為該數列所有元素的乘積,要求你求出所有可能的數列的積的和 mod 1000000007的...