首页 > 代码库 > (dp)17bupt新生赛——B. Hmz 的女装
(dp)17bupt新生赛——B. Hmz 的女装
B. Hmz 的女装 2017新生赛
时间限制 1000 ms 内存限制 65536 KB
题目描述
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 }
(dp)17bupt新生赛——B. Hmz 的女装
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。