很简单的递推题。d[n]=d[n-1]+d[n-k]

注意每次输入a和b时,如果每次都累加,就做了很多重复性工作,会超时。

所以用预处理前缀和来解决重复累加问题。

最后一个细节坑了我多次:

printf("%I64d\n",(s[b]-s[a-1]+mod)%mod);

这句话中加mod万万不能少,因为理论上s[b]-s[a-1]肯定大于0,但是由于两个都是模1000000007以后的结果,那么就不一定了,当s[b]-s[a-1]<0时结果是负的,不是题意中应该输出的结果,所以一定要加mod。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
#include<cctype>
#include<sstream>
using namespace std;
#define INF 1000000000
#define eps 1e-8
#define pii pair<int,int>
#define LL long long int
#define mod 1000000007
LL t,k,a,b,d[],s[];
int main()
{
//freopen("in8.txt","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%I64d%I64d",&t,&k);
for(int i=;i<k;i++) d[i]=;
d[k]=;
for(int i=k+;i<=;i++)
{
d[i]=(d[i-]+d[i-k])%mod;
}
s[]=;
s[]=d[];
for(int i=;i<=;i++)
{
s[i]=(s[i-]+d[i])%mod;
}
for(int i=;i<t;i++)
{
scanf("%I64d%I64d",&a,&b);
printf("%I64d\n",(s[b]-s[a-]+mod)%mod);
}
//fclose(stdin);
//fclose(stdout);
return ;
}

最新文章

  1. git log 常用命令及技巧
  2. Swift - 2.3的代码到3.0的转变
  3. jQuery学习笔记:attr()与prop()的区别
  4. .net 开源相关
  5. ylbtech-Unitity-CS-Arrays:数组
  6. 【学习笔记】【C语言】循环结构-do while
  7. Hql处理日期格式化问题
  8. redis学习-day1
  9. Git branch (分支学习)
  10. TDirectory.GetParent获取指定目录的父目录
  11. octopress添加回到顶部按钮
  12. smartassembly 使用指南
  13. react native调试
  14. td之overflow:hidden 多余文本隐藏效果
  15. Python3与Python2的区别汇总
  16. homebrew常用命令
  17. nginx+apache前后台搭配使用
  18. 初学Java Web(6)——JSP学习总结
  19. clCreateBuffer和clCreateBuufer + clEnqueueWriteBuffer
  20. Django生命周期 URL ----&gt; CBV 源码解析-------------- 及rest_framework APIView 源码流程解析

热门文章

  1. [String ] StringBuffer VS StringBuilder
  2. The Maximum Unreachable Node Set 【17南宁区域赛】 【二分匹配】
  3. Kattis - abc 【水】
  4. Loadrunder之脚本篇——关联函数对话框详解
  5. UNIX 系统常用管理命令
  6. 建议47:使用logging记录日志信息
  7. vue引入bootstrap.min.css报错:Cannot find module &quot;./assets/css/bootstrap.min.css&quot;
  8. JVM内存的堆、栈和方法区
  9. CentOS 6.5 下的截图方法
  10. latin-1