标签:相同 ++ atom print 递推 -- review long 多少
Hmz为了女装,想给自己做一个长度为n的花环。现在有k种花可以选取,且花环上相邻花的种类不能相同。
Hmz想知道,如果他要求第l朵花和第r朵花颜色相同,做花环的方案数是多少。这个答案可能会很大,你只要输出答案对109+7取模的结果即可。
第一行三个整数n,m,k(1≤n≤100000,1≤m≤100000,1≤k≤100000)
接下来m行,每行两个整数l,r,表示要求第l朵花和第r朵花颜色相同。保证l≠r且 |(r?l) mod n| ≠1.
输出m行。对于每一个询问输出一个整数,表示做花环的方案数对109+7取模的结果。
8 3 2
1 4
2 6
1 3
8 3 3
1 4
2 6
1 3
0
2
2
60
108
132
比赛时真该做这个……非常水的递推
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstdlib> 5 #include <algorithm> 6 #include <cstring> 7 #include <string> 8 #include <vector> 9 #include <map> 10 #include <queue> 11 using namespace std; 12 typedef long long LL; 13 const LL MOD=1e9+7; 14 const int MAX=1e5+7; 15 int n,m,k; 16 LL a[MAX]; 17 LL x; 18 LL an; 19 int l,r; 20 int main() 21 { 22 scanf("%d%d%d",&n,&m,&k); 23 a[0]=0; 24 x=1; 25 for(int i=1;i<=n;i++) 26 { 27 x=x*(LL)(k-1)%MOD; 28 // printf("%d\n",x); 29 a[i]=(x-a[i-1]+MOD)%MOD; 30 } 31 while(m--) 32 { 33 scanf("%d%d",&l,&r); 34 an=k*a[abs(r-l)-1]%MOD*a[n-(abs(r-l)+1)]%MOD; 35 printf("%lld\n",an); 36 } 37 return 0; 38 }
标签:相同 ++ atom print 递推 -- review long 多少
原文地址:http://www.cnblogs.com/quintessence/p/6567346.html