【Codeforces Round 271 (Div 2)D】【DP】Flowers 黑色必须连续摆放k,长度为n的摆放方案数
2015-12-08 11:08
429 查看
D. Flowers
time limit per test
1.5 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
We saw the little game Marmot made for Mole's lunch. Now it's Marmot's dinner time and, as we all know, Marmot eats flowers. At every dinner he eats some red and white flowers. Therefore
a dinner can be represented as a sequence of several flowers, some of them white and some of them red.
But, for a dinner to be tasty, there is a rule: Marmot wants to eat white flowers only in groups of size k.
Now Marmot wonders in how many ways he can eat between a and b flowers.
As the number of ways could be very large, print it modulo 1000000007 (109 + 7).
Input
Input contains several test cases.
The first line contains two integers t and k (1 ≤ t, k ≤ 105),
where t represents the number of test cases.
The next t lines
contain two integers ai and bi (1 ≤ ai ≤ bi ≤ 105),
describing the i-th test.
Output
Print t lines
to the standard output. The i-th line should contain the number of ways in which Marmot can
eat between ai and bi flowers
at dinner modulo 1000000007 (109 + 7).
Sample test(s)
input
output
Note
For K = 2 and
length 1 Marmot can eat (R).
For K = 2 and
length 2 Marmot can eat (RR)
and (WW).
For K = 2 and
length 3 Marmot can eat (RRR),
(RWW) and (WWR).
For K = 2 and
length 4 Marmot can eat, for example, (WWWW)
or (RWWR), but for example he can't eat (WWWR).
time limit per test
1.5 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
We saw the little game Marmot made for Mole's lunch. Now it's Marmot's dinner time and, as we all know, Marmot eats flowers. At every dinner he eats some red and white flowers. Therefore
a dinner can be represented as a sequence of several flowers, some of them white and some of them red.
But, for a dinner to be tasty, there is a rule: Marmot wants to eat white flowers only in groups of size k.
Now Marmot wonders in how many ways he can eat between a and b flowers.
As the number of ways could be very large, print it modulo 1000000007 (109 + 7).
Input
Input contains several test cases.
The first line contains two integers t and k (1 ≤ t, k ≤ 105),
where t represents the number of test cases.
The next t lines
contain two integers ai and bi (1 ≤ ai ≤ bi ≤ 105),
describing the i-th test.
Output
Print t lines
to the standard output. The i-th line should contain the number of ways in which Marmot can
eat between ai and bi flowers
at dinner modulo 1000000007 (109 + 7).
Sample test(s)
input
3 2 1 3 2 3 4 4
output
6 5 5
Note
For K = 2 and
length 1 Marmot can eat (R).
For K = 2 and
length 2 Marmot can eat (RR)
and (WW).
For K = 2 and
length 3 Marmot can eat (RRR),
(RWW) and (WWR).
For K = 2 and
length 4 Marmot can eat, for example, (WWWW)
or (RWWR), but for example he can't eat (WWWR).
#include<stdio.h> #include<iostream> #include<string.h> #include<string> #include<ctype.h> #include<math.h> #include<set> #include<map> #include<vector> #include<queue> #include<bitset> #include<algorithm> #include<time.h> using namespace std; void fre(){freopen("c://test//input.in","r",stdin);freopen("c://test//output.out","w",stdout);} #define MS(x,y) memset(x,y,sizeof(x)) #define MC(x,y) memcpy(x,y,sizeof(x)) #define MP(x,y) make_pair(x,y) #define ls o<<1 #define rs o<<1|1 typedef long long LL; typedef unsigned long long UL; typedef unsigned int UI; template <class T1,class T2>inline void gmax(T1 &a,T2 b){if(b>a)a=b;} template <class T1,class T2>inline void gmin(T1 &a,T2 b){if(b<a)a=b;} const int N=1e5+10,M=0,Z=1e9+7,ms63=1061109567; int f ,s ; int n,k,l,r; int main() { while(~scanf("%d%d",&n,&k)) { f[0]=s[0]=1; for(int i=1;i<=100000;++i) { f[i]=f[i-1]; if(i>=k)f[i]=(f[i]+f[i-k])%Z; s[i]=(s[i-1]+f[i])%Z; } for(int i=1;i<=n;++i) { scanf("%d%d",&l,&r); printf("%d\n",(s[r]-s[l-1]+Z)%Z); } } return 0; } /* 【题意】 我们要用黑白棋子摆成一列,其中黑色棋子必须k个一组连续摆放。 问你,对于长度为[1,n]的摆放,最终有多少种方案。 【类型】 DP 【分析】 这题我们用f[i]表示长度为i的合法摆放方案有多少种。 然后,对于每次在位置i的摆放,可以考虑这个位置是摆放白棋还是黑棋。 对应的状态转移前驱分别是f[i-1]和f[i-k] 然后记录一个前缀和,我们这道题就做完啦! 【时间复杂度&&优化】 O(n) */
相关文章推荐
- 【Educational Codeforces Round 1A】【水题】Tricky Sum 1~n之和减去2的幂
- 【Educational Codeforces Round 1B】【字符串平移 水题】Queries on a String 字符串平移水题
- 【Educational Codeforces Round 1C】【计算几何-极角排序 atan2 long double】Nearest vectors 平面图上原点引出角度最小的两个
- 【Educational Codeforces Round 1D】【DFS 联通块打标记法】Igor In the Museum 联通块内墙的面数
- 【Educational Codeforces Round 1E】【动态规划-多维DP】Chocolate Bar 矩形巧克力掰开吃的最小成本
- 【HDU5188 BestCoder Round 33C】【贪心排序+DP】zhx and contest 考试不被怀疑作弊条件下达到至少m分的最少时间
- 【Codeforces Round 299 (Div 2)D】【KMP 本质是最前与最后匹配】Tavas and Malekas 长度为n的匹配串被模板串多位点覆盖的匹配串个数
- 【HDU5569 BestCoder Round 63 (div1)B】【DP】matrix 向右走向下走最大乘积和
- 【HDU5568 BestCoder Round 63 (div1)A】【DP java高精度】sequence2 长度恰好为m的LIS数
- 【Codeforces Round 333 (Div 2)A 】【水题 简单进制模拟】Two Bases 不同进制数比大小
- 【Codeforces Round 333 (Div 2)B】【贪心 多指针】Approximating a Constant Range 给定数组 相邻元素波动为1 求差值不超1的最长序连续子序列
- 【Codeforces Round 333 (Div 2)C】【最短路】The Two Routes 完全图两种双向边的最小最大距离
- 【Codeforces Round 333 (Div 2)D】【线段树 or ST-RMQ 初始化78msAC】Lipshitz Sequence 若干区间询问所有子区间的答案和
- 【Codeforces Round 333 (Div 2)E】【期望DP概率做法 树状数组转前缀和】Kleofáš and the n-thlon n场比赛m个人获得总名次的期望
- 【Codeforces Testing Round 12A】【讨论 边界元素映射】Divisibility 区间范围内k倍数的数的个数
- 【Codeforces Testing Round 12B】【贪心】Restaurant 选取数量最多的不覆盖区间数
- 【Codeforces Testing Round 12C】【DP 树状数组优化】Subsequences n个不同数,长度为m的LIS数
- 【Educational Codeforces Round 2B】【map or 二分查找】Queries about less or equal elements b[]中的每个数比a[]中多少数大
- 【Educational Codeforces Round 2C】【贪心】最少修改数下得到字典序尽可能小回文串
- 【HDU6197 2017 ACM ICPC Asia Regional Shenyang Online D】【LIS 最长不下降序列】array array array 数列删除恰好K个数,使得恰好