Flowers

CodeForces - 474D

话说某个幸运的小伙伴X拿到了kevin女神送的蛋糕,然而他的吃法非常奇特,他独创了两种吃蛋糕的办法:一、一次吃一整个蛋糕;二、一次吃k个蛋糕。
那么,当蛋糕数量为x1到x2之间时,一共能有几种不同的吃法呢?
由于答案很大,输出结果mod 1000000007的值

Input

第一行有两个正整数t,k(1<=t,k<=100000) ,其中t表示数据的组数。
接下来t行,每行两个数x1, x2(1<=x1<=x2<=100000)。

Output

共t行,每行一个正整数x,表示蛋糕数量在x1-x2之间时,一共能有几种不同的吃法,结果对(10^9+7)取模

Sample Input

3 2
1 3
2 3
4 4

Sample Output

6

5

5

Hint

样例中,k=2
我们标记吃法1为A,吃法2为B
当蛋糕数为1时,共1种吃法 即为A
当蛋糕数为2时,共2种,分别为 AA,B
当蛋糕数为3时,共3种,分别为 AAA,AB,BA
当蛋糕数为4时,共5种,分别为 AAAA, AAB,ABA,BAA,BB
 
sol:开始以为是组合数一样的东西,搞了一会后严重自闭,发现是dp。。。
dp[i]表示蛋糕数量为 i 的吃法,对dp记个前缀和就可以O(1)查询了
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const ll Mod=;
const int N=;
int T;
ll K;
ll Qzh[N];
ll dp[N];
int main()
{
int i,j;
R(T); R(K);
dp[]=Qzh[]=;
for(i=;i<=;i++)
{
dp[i]+=dp[i-];
if(i>=K) dp[i]+=dp[i-K];
dp[i]-=(dp[i]>=Mod)?Mod:;
Qzh[i]=Qzh[i-]+dp[i];
Qzh[i]-=(Qzh[i]>=Mod)?Mod:;
}
while(T--)
{
int l=read(),r=read();
Wl((Qzh[r]-Qzh[l-]+Mod)%Mod);
}
return ;
}
/*
input
3 2
1 3
2 3
4 4
output
6
5
5
*/

codeforces474D的更多相关文章

随机推荐

  1. 使用keras的LSTM进行预测----实战练习

    代码 import numpy as np from keras.models import Sequential from keras.layers import Dense from keras. ...

  2. 【小技巧】css文字两端对齐

    一.文字两端对齐方法:  text-align-last: justify; 二.举个丽子:  三.效果如下:  四.注意:  要使文字在容器中两端对齐,该容器需要是一个块级元素,要有自己的宽度.

  3. 两次console.log打印值不同

    var a=[1,2,3] console.log(a); a[2]=10; console.log(a); // 打印结果 // (3) [1, 2, 3] // (3) [1, 2, 10] // ...

  4. 网络编程-Socket介绍

    Socket介绍 什么是socket?(5分钟) Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议 ...

  5. hibernate 的sum(filed)引发的NullPointException错误解决过程

    背景: 在用hql语句进行sum查询时遭遇NPE问题: StringBuilder builder = new StringBuilder("select SUM(actualWorking ...

  6. 每周分享之JS数组的使用

    数组,一堆数字归为一组,就是一个数组,一堆对象放在一个组里,也是一个数组,概念很容易懂,说白了就是一个有限集合. JS数组的语法无法两种,插入和移除(语法自行科普).用处挺常见的,既然数组是一个集合, ...

  7. Django 内的母版-子html规则

    一.母版 在实际应用中,在开发一个网站时,从首页到主页.到目录页,等等!有时候,我们大部分基础网页头.边框.侧边框.基础css.js等复用性很高,如果每一个html都要独立去写的话,就太麻烦了. 而把 ...

  8. Laravel5.5+ 区分前后端用户登录

    Laravel 的用户认证是通过 Auth Facade 门脸实现的,手动认证可是使用  Auth::login() 或 Auth::attempt() 这两个方法实现. 以下内容纯属个人实现,也许有 ...

  9. day 7-19 Mysql索引原理与查询优化

    一,介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语 ...

  10. JS学习笔记 等于和包装对象

    严格等于 a===b 首先判断两边数据的类型,若类型不同,返回false. 若类型相同(1.2和1.2,字符串相等指内容和长度都是一样的),返回true null===null undefined== ...