题目链接:https://www.nowcoder.com/acm/contest/140/A

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

White Cloud is exercising in the playground.
White Cloud can walk 1 meters or run k meters per second.
Since White Cloud is tired,it can't run for two or more continuous seconds.
White Cloud will move L to R meters. It wants to know how many different ways there are to achieve its goal.
Two ways are different if and only if they move different meters or spend different seconds or in one second, one of them walks and the other runs.

输入描述:

The first line of input contains 2 integers Q and k.Q is the number of queries.(Q<=100000,2<=k<=100000)
For the next Q lines,each line contains two integers L and R.(1<=L<=R<=100000)

输出描述:

For each query,print a line which contains an integer,denoting the answer of the query modulo 1000000007.

输入

3 3
3 3
1 4
1 5

输出

2
7
11
 
题意:
有个人现在有两种行进方式:1、走路,速度 1 m/s;2、跑步,速度 k m/s,但是跑步不能持续两秒及以上。
现在这个人目标是跑[L,R]米,请问他有多少种方式完成?
 
题解:
假设这个人从0米出发,只能往右跑,只要到达[L,R]区间即可,
我们设:
 dp[i][0]:最后一步是跑着到 i 米的方案数。
 dp[i][1]:最后一步是走着到 i 米的方案数。
那么我们可以先一次性把所有dp[i][0]和dp[i][1]做出来,然后对于每个查询,答案就是$\sum\limits_{i = L}^R {\left( {dp\left[ i \right]\left[ 0 \right] + dp\left[ i \right]\left[ 1 \right]} \right)} $。
同时,考虑到如果每次查询都要求一次和比较浪费时间,所以用前缀和数组$sum\left[ i \right] = \sum\limits_{k = 0}^i {\left( {dp\left[ k \right]\left[ 0 \right] + dp\left[ k \right]\left[ 1 \right]} \right)} $。
 
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAX=+;
const ll MOD=; int Q,k;
int L,R;
ll dp[MAX][];
//dp[i][0]:最后一步是跑着到 i 米的方案数。
//dp[i][1]:最后一步是走着到 i 米的方案数。
ll sum[MAX]; int main()
{
scanf("%d%d",&Q,&k); memset(dp,,sizeof(dp));
dp[][]=, dp[][]=;
for(int i=;i<=MAX;i++)
{
dp[i+k][]+=dp[i][]; dp[i+k][]%=MOD;
dp[i+][]+=dp[i][]+dp[i][]; dp[i+][]%=MOD;
} sum[]=;
for(int i=;i<=MAX;i++)
{
//printf("%d: %lld %lld\n",i,dp[i][0],dp[i][1]);
sum[i]=(sum[i-]+(dp[i][]%MOD+dp[i][]%MOD)%MOD)%MOD;
} for(int q=;q<=Q;q++)
{
scanf("%d%d",&L,&R);
printf("%lld\n",((sum[R]-sum[L-])+MOD)%MOD);
}
}

2018牛客网暑期ACM多校训练营(第二场) A - run - [DP]的更多相关文章

  1. 2018牛客网暑期ACM多校训练营(第二场)I- car ( 思维)

    2018牛客网暑期ACM多校训练营(第二场)I- car 链接:https://ac.nowcoder.com/acm/contest/140/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 ...

  2. 2018牛客网暑期ACM多校训练营(第一场)D图同构,J

    链接:https://www.nowcoder.com/acm/contest/139/D来源:牛客网 同构图:假设G=(V,E)和G1=(V1,E1)是两个图,如果存在一个双射m:V→V1,使得对所 ...

  3. 2018 牛客网暑期ACM多校训练营(第一场) E Removal (DP)

    Removal 链接:https://ac.nowcoder.com/acm/contest/139/E来源:牛客网 题目描述 Bobo has a sequence of integers s1, ...

  4. 2018牛客网暑期ACM多校训练营(第十场)A Rikka with Lowbit (树状数组)

    链接:https://ac.nowcoder.com/acm/contest/148/A 来源:牛客网 Rikka with Lowbit 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C ...

  5. 2018牛客网暑期ACM多校训练营(第十场)J Rikka with Nickname(二分,字符串)

    链接:https://ac.nowcoder.com/acm/contest/148/J?&headNav=acm 来源:牛客网 Rikka with Nickname 时间限制:C/C++ ...

  6. 2018牛客网暑期ACM多校训练营(第二场)J Farm(树状数组)

    题意 n*m的农场有若干种不同种类作物,如果作物接受了不同种类的肥料就会枯萎.现在进行t次施肥,每次对一个矩形区域施某种类的肥料.问最后枯萎的作物是多少. 分析 作者:xseventh链接:https ...

  7. 2018牛客网暑期ACM多校训练营(第一场)B Symmetric Matrix(思维+数列递推)

    题意 给出一个矩阵,矩阵每行的和必须为2,且是一个主对称矩阵.问你大小为n的这样的合法矩阵有多少个. 分析 作者:美食不可负064链接:https://www.nowcoder.com/discuss ...

  8. 2018牛客网暑期ACM多校训练营(第三场) A - PACM Team - [四维01背包][四约束01背包]

    题目链接:https://www.nowcoder.com/acm/contest/141/A 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...

  9. 2018牛客网暑期ACM多校训练营(第五场) F - take - [数学期望][树状数组]

    题目链接:https://www.nowcoder.com/acm/contest/143/F 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...

  10. 2018牛客网暑期ACM多校训练营(第五场) E - room - [最小费用最大流模板题]

    题目链接:https://www.nowcoder.com/acm/contest/143/E 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...

随机推荐

  1. 网易 2016 实习研发project师 3道 编程题

    1 比較重量 给定两颗钻石的编号g1,g2,编号从1開始.同一时候给定关系数组vector,当中元素为一些二元组.第一个元素为一次比較中较重的钻石的编号,第二个元素为较轻的钻石的编号.最后给定之前的比 ...

  2. __stdcall __cdecl 引起的程序崩溃

    崩溃弹出的截图如下 看到0xC0000005, 访问冲突的问题, 九成九是内存访问违规, 比如访问了已经释放的指针, 又或者是离开函数时栈被破坏之类. 找了一下午一直没有头绪, 好在有一份可以执行的源 ...

  3. Docker应用之镜像

    一.Docker包括三个基本概念 1.镜像(Image):Docker镜像是一个只读模板,例如一个镜像可以包含完整的Linux系统环境,里面仅仅安装了Apache或用户其他应用程序:镜像可以用来创建D ...

  4. Create maintenance backup plan in SQL Server 2008 R2 using the wizard

    You will need to identify how you want your maintenance plan to be setup. In this example the mainte ...

  5. Unity透明Shader

    Shader "Custom/Blocks" { Properties { _Color (,,,) _MainTex ("Albedo (RGB)", 2D) ...

  6. ListView实现多种item布局的方法和注意事项

    这篇文章的效果也是大家常见的,各种通讯应用的对话列表都是这种方式,像微信.whatsapp.易信.米聊等.我们这篇文章也权当为回忆,形成简单的笔记.这篇文章参考了2009年Google IO中的< ...

  7. 新唐ISP操作步骤(转)

    1,电脑上装上“NuMicro_ICP_Programming_Tool_v1.18.5320.zip”:2,把目标板通过SWD口的NU-LINK连接到电脑的USB口上:3,打开桌面的“NuMicro ...

  8. [原]如何为SqlServer2008数据库分配用户

    前言: 当一个项目完成后,为了数据安全,总会对该项目的数据库分配一个用户,应该说总会创建一个用户来管理这个数据库,并且这个用户只能管理这个数据库.搞了好多次,每次都忘记怎么设置,所以写一篇博文记录一下 ...

  9. 使用es6使数组的第一项和最后一项就行调换

    let arr = [1, 2, 3,4]; let a = arr.filter((item, index) => { return index > 0 && index ...

  10. Delphi应用程序的调试(六)步进式代码调试

    步进式代码调试(Stepping Through Your Code) 步进式代码调试是最基本的调试操作之一,但仍要在此讲述.人们常常容易犯只见树木不见森林的错误.经常复习基本的知识有助于读者了解以前 ...