Codeforces Round #271 (Div. 2) D. Flowers (递推 预处理)
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 sizek.
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 modulo1000000007 (109 + 7).
Input contains several test cases.
The first line contains two integers t andk (1 ≤ t, k ≤ 105),
wheret represents the number of test cases.
The next t lines contain two integers
ai andbi (1 ≤ ai ≤ bi ≤ 105),
describing the i-th test.
Print t lines to the standard output. Thei-th line should contain the number of ways in which Marmot can eat betweenai
andbi flowers at dinner modulo1000000007 (109 + 7).
3 2
1 3
2 3
4 4
6
5
5
- For K = 2 and length1 Marmot can eat (R).
- For K = 2 and length2 Marmot can eat (RR) and (WW).
- For K = 2 and length3 Marmot can eat (RRR), (RWW) and (WWR).
- For K = 2 and length4 Marmot can eat, for example, (WWWW) or (RWWR), but for
example he can't eat (WWWR).
考虑第n个。假如n是小于k的,那么仅仅能都是是R,也就是仅仅有一种情况。
假如大于等于k。假设第n个是W,那么从n-k+1到n所有为W,假设第n个是R,那么数量就是前n-1个的数量。
dp[n] = 1; (0<= n < k)
dp[n] = dp[n-1] + dp[n-k]; (n >= k)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include <queue>
#include <algorithm>
#include <cmath>
#define mem(f) memset(f,0,sizeof(f))
#define M 100005
#define mod 1000000007
#define MAX 0X7FFFFFFF
#define maxn 100005
#define lson o<<1, l, m
#define rson o<<1|1, m+1, r
using namespace std;
typedef long long LL; int n = maxn, k, t, a, b, dp[maxn], sum[maxn]; int main()
{
scanf("%d%d", &t, &k);
for(int i = 0; i < k; i++) dp[i] = 1;
for(int i = k; i < n; i++) dp[i] = (dp[i-1] + dp[i-k])%mod;
for(int i = 1; i < n; i++) sum[i] = (sum[i-1] + dp[i])%mod;
while(t--) {
scanf("%d%d", &a, &b);
printf("%d\n", ((sum[b]-sum[a-1])%mod+mod)%mod );
}
return 0;
}
Codeforces Round #271 (Div. 2) D. Flowers (递推 预处理)的更多相关文章
- Codeforces Round #271 (Div. 2) D. Flowers (递推)
题目链接:http://codeforces.com/problemset/problem/474/D 用RW组成字符串,要求w的个数要k个连续出现,R任意,问字符串长度为[a, b]时,字符串的种类 ...
- Codeforces Round #671 (Div. 2) B. Stairs (递推)
题意:一个台阶由一些单元格组成,如果一个高度为\(n\)的台阶中有\(n\)个不相邻的正方形(如图中的样例),就称这个台阶是"好台阶",现给你\(x\)个单元格,问最多能组成多少个 ...
- Codeforces Round #271 (Div. 2) D Flowers【计数dp】
D. Flowers time limit per test 1.5 seconds memory limit per test 256 megabytes input standard input ...
- Codeforces Round #271 (Div. 2) D.Flowers DP
D. Flowers We saw the little game Marmot made for Mole's lunch. Now it's Marmot's dinner time and, ...
- Codeforces Round #271 (Div. 2)题解【ABCDEF】
Codeforces Round #271 (Div. 2) A - Keyboard 题意 给你一个字符串,问你这个字符串在键盘的位置往左边挪一位,或者往右边挪一位字符,这个字符串是什么样子 题解 ...
- Codeforces Round #271 (Div. 2)D(递推,前缀和)
很简单的递推题.d[n]=d[n-1]+d[n-k] 注意每次输入a和b时,如果每次都累加,就做了很多重复性工作,会超时. 所以用预处理前缀和来解决重复累加问题. 最后一个细节坑了我多次: print ...
- Codeforces Round #271 (Div. 2) F ,E, D, C, B, A
前言:最近被线段树+简单递推DP虐的体无完肤!真是弱! A:简单题,照着模拟就可以,题目还特意说不用处理边界 B:二分查找即可,用lower_lound()函数很好用 #include<stri ...
- Codeforces Round #271 (Div. 2) 解题报告
题目地址:http://codeforces.com/contest/474 A题:Keyboard 模拟水题. 代码例如以下: #include <iostream> #include ...
- Codeforces Round #271 (Div. 2)
A. Keyboard 题意:一个人打字,可能会左偏一位,可能会右偏一位,给出一串字符,求它本来的串 和紫书的破损的键盘一样 #include<iostream> #include< ...
随机推荐
- centOS linux 下PHP编译安装详解
一.下载PHP源码包 wget http://php.net/distributions/php-5.6.3.tar.gz 二.添加依赖应用 yum install -y gcc gcc-c++ ...
- webstorm里直接调用命令行
写代码写到一半要切换窗口出去敲命令行?webstorm的external tools可以帮你省下一点时间 举例说明,比如我要直接使用npm: ctrl+alt+s打开setting菜单,找到exter ...
- eclipse自动为变量生成Get/Set函数
启动Eclipse,打开demo工程.如图: 假定为成员变量test生成Get/Set函数. 光标定位到该成员变量,如图: 右键选择“source”-“Generate Getters and ...
- codeforces_C. Sequence Transformation
http://codeforces.com/contest/1059/problem/C 题意: 最初给一个1.2.3.…….n的序列,每次操作先将所有元素的最大公约数加入答案序列,然后在序列中任意删 ...
- ALTER TABLE - 修改表的定义
SYNOPSIS ALTER TABLE [ ONLY ] name [ * ] ADD [ COLUMN ] column type [ column_constraint [ ... ] ] AL ...
- vsphere中的linux虚拟机安装vmware-tools
先在vcenter中选中虚拟机点击安装这个工具,如图 然后这台linux虚拟机的控制台操作,挂载先建立挂载目录 cd /mnt #在挂载建一个用来挂载的文件. mkdir cdrom 使用mount命 ...
- 【转】c语言中的定义和声明
1. 变量的定义.声明 变量的声明有两种情况: 一种是需要建立存储空间的.例如:int a.在声明的时候就已经建立了存储空间.这种声明是"定义性声明(defining declaratio ...
- js模拟支付宝发送短信验证码&&&&短信倒计时
html <div class="pwdContent"> <div class="pwdBox"></div> <d ...
- 第3节 mapreduce高级:8、9、自定义分区实现分组求取top1
自定义GroupingComparator求取topN GroupingComparator是mapreduce当中reduce端的一个功能组件,主要的作用是决定哪些数据作为一组,调用一次reduce ...
- JVM优化(下)
14.Tomcat8优化之G1牢记收集器的测试结果以及小结: jmeter测试:(1)tomcat未做任何优化:(2)禁用AJP:(3)启用连接池:(4)设置最大线程数1000,初始线程数200:(5 ...