Hmz 的女装

Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)

Total Submission(s): 190 Accepted Submission(s): 92

Problem Description

Hmz为了女装,想给自己做一个长度为n的花环。现在有k种花可以选取,且花环上相邻花的种类不能相同。

Hmz想知道,如果他要求第l朵花和第r朵花颜色相同,做花环的方案数是多少。这个答案可能会很大,你只要输出答案对10^9+7取模的结果即可。

Input

第一行三个整数n,m,k(1≤n≤100000,1≤m≤100000,1≤k≤100000)

接下来m行,每行两个整数l,r,表示要求第l朵花和第r朵花颜色相同。保证l≠r且 |(r-l) mod n| ≠1.

Output

输出m行。对于每一个询问输出一个整数,表示做花环的方案数对10^9+7取模的结果。

Sample Input

8 3 2

1 4

2 6

1 3

8 3 3

1 4

2 6

1 3

Sample Output

0

2

2

60

108

132

题意

分析

这道题蛮难想的,也许是我做过的题太少

我们可以观察到两个相同点将环分成两段,这两段的花分配的种数互不影响(请仔细思考)。对于其中任意一段,我们考虑从一端开始扩展,我们设置d[i][0]为长度i(都不包含固定端),第i朵花与固定端相同的方案数。d[i][1]为长度i,第i朵花与固定端颜色相同的方案数

推出

dp[i][0]=dp[i-1][1];

dp[i][1]=dp[i-1][1](k-2)+dp[i][0](k-1)

由于要与固定端不同,只要最后去dp[len][1]即可,最后答案为dp[len1][1]dp[len2][1]k即可,k为固定端颜色可取种数

推荐相似blog zchahaha

trick

1.注意取模

代码

#include <bits/stdc++.h>
using namespace std; #define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a)) const ll mod = 1e9+7;
int n,m,k;
int l,r;
ll dp[100100][2]; int main()
{
while(scanf("%d %d %d",&n,&m,&k)!=EOF)
{
mem(dp,0);
dp[1][0]=0;dp[1][1]=k-1;
for(int i=2;i<=n;++i)
{
dp[i][1]=(dp[i-1][1]*(k-2)+dp[i-1][0]*(k-1))%mod;
dp[i][0]=dp[i-1][1];
}
F(i,1,m)
{
int l,r;
scanf("%d %d",&l,&r); if(l>r) swap(l,r);
ll ans;
int len1=r-l-1,len2=(n-r+l-1);
ans=k*dp[len1][1]%mod*dp[len2][1]%mod;
printf("%I64d\n",ans%mod);
}
}
return 0;
}

Hmz 的女装(递推)的更多相关文章

  1. 【BZOJ-2476】战场的数目 矩阵乘法 + 递推

    2476: 战场的数目 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 58  Solved: 38[Submit][Status][Discuss] D ...

  2. 从一道NOI练习题说递推和递归

    一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...

  3. Flags-Ural1225简单递推

    Time limit: 1.0 second Memory limit: 64 MB On the Day of the Flag of Russia a shop-owner decided to ...

  4. 利用Cayley-Hamilton theorem 优化矩阵线性递推

    平时有关线性递推的题,很多都可以利用矩阵乘法来解决. 时间复杂度一般是O(K3logn)因此对矩阵的规模限制比较大. 下面介绍一种利用利用Cayley-Hamilton theorem加速矩阵乘法的方 ...

  5. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

    还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...

  6. 简单递推 HDU-2108

    要成为一个ACMer,就是要不断学习,不断刷题...最近写了一些递推,发现递推规律还是挺明显的,最简单的斐波那契函数(爬楼梯问题),这个大家应该都会,看一点稍微进阶了一点的,不是简单的v[i] = v ...

  7. [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索

    1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...

  8. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

  9. openjudge1768 最大子矩阵[二维前缀和or递推|DP]

    总时间限制:  1000ms 内存限制:  65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...

随机推荐

  1. People seldom do what they believe in. They do what is convenient, then repent.

    People seldom do what they believe in. They do what is convenient, then repent. 人们很少真正实践他们的理想.他们只做比较 ...

  2. 【Java编程】建立一个简单的JDBC连接-Drivers, Connection, Statement and PreparedStatement

    本blog提供了一个简单的通过JDBC驱动建立JDBC连接例程.并分别通过Statement和PreparedStatement实现对数据库的查询. 在下一篇blog中将重点比較Statement与P ...

  3. iOS开发之UITabBarController和UICollectionView的使用

    这一篇要记录的是iOS开发中UITabBarController控件和UICollectionView控件的使用.APP跑起来之后的效果例如以下图: watermark/2/text/aHR0cDov ...

  4. 当 外部 input 值的改变,获取 当前 input type="hidden" 的值

    1.如何用jquery获取<input id="test" name="test" type="text"/>中输入的值? 方法 ...

  5. python使用cx_oracle连接oracle数据库

    http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html---下载instantclient-basic-linux.x ...

  6. 基于mqtt协议实现手机位置跟踪

    Mqtt协议是物联网领域的一个标准协议,具有轻巧,对设备,带宽要求低,可靠稳定的特点,适合用来实现手机定位跟踪功能. 目前我初步搭建起来了整个可运行的框架,大致为如下思路:1.手机端通过位置服务,获取 ...

  7. Understanding When to use RabbitMQ or Apache Kafka Kafka RabbitMQ 性能对比

    Understanding When to use RabbitMQ or Apache Kafka https://content.pivotal.io/rabbitmq/understanding ...

  8. MTK平台下Battery驱动分析

    主要涉及代码: Kernel: kernel-3.10\drivers\power\mediatek\ kernel-3.10\drivers\misc\mediatek\mach\mt6580\&l ...

  9. linux杀死进程

    http://blog.csdn.net/andy572633/article/details/7211546 ps -ef | grep firefox kill -s 9 1827

  10. Codeforces Round #352 (Div. 2) C. Recycling Bottles

      C. Recycling Bottles time limit per test 2 seconds memory limit per test 256 megabytes input stand ...