D. Flowers
2016-02-19 18:15
260 查看
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 betweenai 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).
解题说明:此题是一道动态规划题,由于要连续吃k朵白花,那么能够得到吃花的不同方式的转移方程,a[i]=a[i-1]+a[i-k],要么是吃完前i-1朵花再吃一朵红花,要么是吃了i-k朵花再连续吃k朵白花。有了转移方程后就可以先打表,再根据输入的数据进行输出即可。
#include<cstdio>
#include <cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int t,k,i;
int p,b;
long long int a[100001];a[0]=0;
long long int mod=1000000007;
cin>>t>>k;
for(i=1;i<=100000;i++)
{
if(i<k)
{
a[i]=1;
}
else if(i==k)
{
a[i]=2;
}
else
{
a[i]=(a[i-1]+a[i-k])%mod;
}
}
for(i=2;i<=100000;i++)
{
a[i]=(a[i-1]+a[i]);
}
while(t--)
{
cin>>p>>b;
cout<<(a[b]-a[p-1])%mod<<endl;
}
return 0;
}
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 betweenai 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).
解题说明:此题是一道动态规划题,由于要连续吃k朵白花,那么能够得到吃花的不同方式的转移方程,a[i]=a[i-1]+a[i-k],要么是吃完前i-1朵花再吃一朵红花,要么是吃了i-k朵花再连续吃k朵白花。有了转移方程后就可以先打表,再根据输入的数据进行输出即可。
#include<cstdio>
#include <cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int t,k,i;
int p,b;
long long int a[100001];a[0]=0;
long long int mod=1000000007;
cin>>t>>k;
for(i=1;i<=100000;i++)
{
if(i<k)
{
a[i]=1;
}
else if(i==k)
{
a[i]=2;
}
else
{
a[i]=(a[i-1]+a[i-k])%mod;
}
}
for(i=2;i<=100000;i++)
{
a[i]=(a[i-1]+a[i]);
}
while(t--)
{
cin>>p>>b;
cout<<(a[b]-a[p-1])%mod<<endl;
}
return 0;
}
相关文章推荐
- qt程序运行,有时候出现内存错误
- Ionic基础——幻灯指令 ion-slide-box
- 关于思考和实践
- leetcode笔记--Odd Even Linked List
- Android面试题整理
- 绘制曲线
- 微信粉丝主动推送信息或者商品
- 正则相关
- Python处理日期坐标轴
- 点击AlertDialog按钮不关闭对话框
- 同步函数与异步函数
- 微信api 第三方平台授权 登录 ,获取用户信息
- RazorEngine在非MVC下的使用,以及使用自定义模板
- iOS启动图片适配问题
- mac的svn之cornerstone简易教程
- quick-mark: How Latency is Measured
- Android原生定位
- jquery对象和DOM对象的相互转换
- 项目管理工具~SVN
- c语言:把只含因子2、3和5的数称为丑数,求按从小到大的顺序的第1500个丑数(两种方法比较)