Codeforces Round #271 (Div. 2) D 递推
来源:互联网 发布:图像自动对比软件 编辑:程序博客网 时间:2024/04/29 18:10
链接:戳这里
D. Flowers
time limit per test1.5 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard 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).
Examples
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).
题意:
给出n,k分别表示花的朵数以及每一团白花的大小。
要求输出区间长度[a,b]内,白花的所有摆放种数。(这里一旦出现白花那么size必须是k)
思路:
手推几组样例就发现了长度为i且size为k的时候方案数为: a[i]=a[i-1]+a[i-k]
然后用个前缀和 sum[i]=sum[i-1]+a[i]
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<vector>#include <ctime>#include<queue>#include<set>#include<map>#include<stack>#include<iomanip>#include<cmath>#include<bitset>#define mst(ss,b) memset((ss),(b),sizeof(ss))///#pragma comment(linker, "/STACK:102400000,102400000")typedef long long ll;#define INF (1ll<<60)-1#define Max 1e9#define mod 1000000007using namespace std;ll sum[100100],a[100100];int main(){ int T,k; scanf("%d%d",&T,&k); sum[0]=0; for(int i=1;i<k;i++) a[i]=1; a[k]=2; for(int i=k+1;i<=100000;i++){ a[i]=(a[i-1]+a[i-k])%mod; } for(int i=1;i<=100000;i++) sum[i]=(sum[i-1]+a[i])%mod; while(T--){ int x,y; scanf("%d%d",&x,&y); printf("%I64d\n",((sum[y]-sum[x-1])%mod+mod)%mod); } return 0;}
0 0
- Codeforces Round #271 (Div. 2) D 递推
- Codeforces Round #240 (Div. 2)(D:dp递推)
- Codeforces Round #271 (Div. 2) D. Flowers (递推 预处理)
- Codeforces Round #249 (Div. 2) D. Special Grid (递推乱搞)(好题)
- Codeforces Round #239 (Div. 2) D Long Path(递推)
- Codeforces Round #411(Div. 2)D. Minimum number of steps【思维递推+快速幂】
- Codeforces Round #332 (Div. 2)-D Spongebob and Squares(枚举+递推)
- Codeforces Round #271 (Div. 2) D
- Codeforces Round #346 (Div. 2) G 递推
- Codeforces Round #325 (Div. 2) B 递推
- Codeforces Round #269 (Div. 2) C 递推+打表
- Codeforces Round #271 (Div. 2) A B D
- Codeforces Round #271 (Div. 2) D. Flowers(DP)
- Codeforces Round #103 (Div. 2) D
- Codeforces Round #104 (Div. 2) D
- Codeforces Round #105 (Div. 2) D
- Codeforces Round #139 (Div. 2) D. Snake
- Codeforces Round #155 (Div. 2) D-rats
- spring 问题解决汇总
- POJ 2251:Dungeon Master(三维BFS)
- ESB总线的核心架构
- HDU 1286 找新朋友 (欧拉函数)
- 五种排序方法(选择、冒泡、快排、插入、希尔)
- Codeforces Round #271 (Div. 2) D 递推
- Kubernetes 1.3 从入门到进阶 安装篇(2)
- 《我很简单,请不要欺负我》实验攻略
- 99.Which two statements are true regarding Oracle Data Pump? (Choose two.)
- java常用函数一
- Android移动开发--遇到的问题及解决(二)
- 七月--花开在夏天
- HDOJ - 1242 Rescue
- STM32F10x_SPI(硬件接口 + 软件模拟)读写Flash(25Q16)