链接:https://ac.nowcoder.com/acm/contest/3006/F
来源:牛客网

题目描述

在ACM比赛里,除了CE以外都是有效的提交。每一个提交都会有其评测的结果,或是AC,或是RJ(Rejected,包含各种不通过的情况)。

往往一个人上去提交的时候,总有一个队友会坐在边上等着结果。那个人,往往都是只读题不写题的云选手~

牛牛战队里也有这样的云选手——牛能。当牛能看到有效提交得到了AC以后,都会大呼一声“你好能啊!”。

反之,如果得到了RJ的话,就会化身为喷子,说xxx句“你能不能行啊!”。大家比赛的都十分紧张,这样的大声呼喊未免会引起旁边队伍的注意。

当然牛牛战队交题的时候也很小心,一旦这一发出现了RJ,下一发有效提交一定能获得AC。

比赛结束了以后,旁边的一支队伍愤怒的跑过来说:你们比赛的时候吵不吵啊,一直在这大吼,吼了这么多句!

激烈的争吵引起了吃瓜群众的注意,吃瓜群众问道:吼了多少句啊,这么讨厌的吗

“啊……我也记不清了,大概是在[L,R]这个区间吧”

作为吃瓜群众的你,想根据这个信息算出,这个队伍有多少种有效提交结果序列的可能呢?

输入描述:

输入数据包括单组数据、多组询问。输入第一行包含一个整数x(2≤x≤100000),表示牛能在RJ状态下会说“你能不能行啊!”的句子数量。

第二行包括一个整数Q(1≤Q≤105),表示询问数量。

接下来Q行,每行包括两个整数L,R(1≤L≤R≤100000),表示每次询问下句子的区间数。

输出描述:

对于每组数据,在一行内输出一个整数,表示牛牛战队提交结果的可能性。由于结果可能很大,请对1000000007取模。

输入


输出


说明

第一组询问:可以是三个AC,或者一个RJ。
第二组询问:可以是1~4个AC,一个AC和一个RJ(共2种顺序),或者一个RJ。
第三组询问:可以有1~5个AC,两个AC和一个RJ(共3种顺序),一个AC和一个RJ(共2种顺序),或者一个RJ。

备注:

AC RJ AC AC 和 AC AC AC RJ 虽然都是3个AC,1个RJ,但是因为提交顺序的不同,视为不同种类。

考虑到了第i句话时候,这种状态都可能由两种状态转移而来。

构造dp[ i ][ 0/1 ]。

dp[ i ][ 0 ]表示共说了i句话,并且最后一发AC了的方案数。

dp[ i ][ 1 ]表示共说了i句话,并且最后一发RJ了的方案数。

由此可知转移条件

dp[ i ][ 0 ]=dp[ i-1 ][ 0 ]+dp[ i-1 ][ 1 ](前面一发是WA是AC无关紧要)

dp[ i ][ 1 ]=dp[ i-k ][ 0 ](前面一发只能是AC)

易确定边界条件 dp[ 0 ][ 0 ]=1; dp[ 0 ][ 1 ]=0;

有Q次区间查询,查询数目较多,我们可以线性时间内预处理成前缀和ans[i]。
查询区间[L,R]时,输出ans[R]-ans[L-1]即可。

 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
const int INF=0x3f3f3f3f;
typedef long long LL;
const double eps =1e-;
const int mod=1e9+;
const int maxn=1e5+;
using namespace std; LL dp[maxn][];//0表示最后一发AC,1表示最后一发RJ
LL ans[maxn]; int main()
{
#ifdef DEBUG
freopen("sample.txt","r",stdin);
#endif int n,m;
scanf("%d %d",&n,&m);
dp[][]=;//边界
for(int i=;i<maxn;i++)//预处理
{
dp[i][]=(dp[i-][]+dp[i-][])%mod;
if(i>=n) dp[i][]=dp[i-n][];
ans[i]=(ans[i-]+(dp[i][]+dp[i][])%mod)%mod;//前缀和
}
while(m--)//m次查询
{
int L,R;
scanf("%d %d",&L,&R);
printf("%lld\n",(ans[R]-ans[L-]+mod)%mod);
} return ;
}

-

碎碎念(DP)的更多相关文章

  1. Linux碎碎念

    在学习Linux过程中,有许多有用的小技巧.如果放在纸质的笔记本上,平时查阅会相当不方便.现在以一种“碎碎念”的方式,汇集整理在此,目前还不是很多,但随着学习.工作的深入,后续会陆陆续续添加更多的小技 ...

  2. 一些关于Linux入侵应急响应的碎碎念

    近半年做了很多应急响应项目,针对黑客入侵.但疲于没有时间来总结一些常用的东西,寄希望用这篇博文分享一些安全工程师在处理应急响应时常见的套路,因为方面众多可能有些杂碎. 个人认为入侵响应的核心无外乎四个 ...

  3. 一个谷粉和3年的Google Reader重度使用者的碎碎念

    2013-03-14 上午看到Andy Rubin辞去Android业务主管职务.由Chrome及应用高级副总裁继任的新闻,还在想这会给Android带来什么,中午刷微博的时候就挨了当头一棒:Goog ...

  4. Jerry的碎碎念:SAPUI5, Angular, React和Vue

    去年我去一个国内客户现场时,曾经和他们IT部门的一位架构师聊到关于在SAP平台上进行UI应用的二次开发时,UI框架是选用UI5还是Vue这个话题. 我们代表SAP, 向客户推荐使用UI5是基于以下六点 ...

  5. 结对编程ending-我和洧洧的碎碎念

    应该是第一次和队友分工合作去完成一个项目,其中也经历了跳进不少坑又被拉回来的过程,总体来说这对于我俩也的确是值得纪念的一次经历. 我的碎碎念时间…… 对比个人项目和结对编程项目二者需求,前者重在面对不 ...

  6. C语言 · 分分钟的碎碎念

    算法提高 分分钟的碎碎念   时间限制:1.0s   内存限制:256.0MB      问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用 ...

  7. 最近关于Qt学习的一点碎碎念

    最近关于Qt学习的一点碎碎念 一直在使用Qt,但是最近对Qt的认识更加多了一些.所以想把自己的一些想法记录下来. Qt最好的学习资料应该是官方的参考文档了.对Qt的每一个类都有非常详细的介绍.我做了一 ...

  8. Java实现 蓝桥杯VIP 算法提高 分分钟的碎碎念

    算法提高 分分钟的碎碎念 时间限制:1.0s 内存限制:256.0MB 问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用箭头画出这个念头的 ...

  9. 2020牛客竞赛 DP F 碎碎念

    作者:儒生雄才1链接:https://ac.nowcoder.com/discuss/366644来源:牛客网 题目连接:https://ac.nowcoder.com/acm/contest/300 ...

随机推荐

  1. Java 推荐读物与源代码阅读

    Java 推荐读物与源代码阅读                                                     江苏无锡  缪小东 1. Java语言基础     谈到Java ...

  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:插入符

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. api文档方法参数

    in型参数,带信息进去用: out型参数,方法执行结束,带着信息出来 如: CreateProcessW(     _In_opt_ LPCWSTR lpApplicationName,     _I ...

  4. PAT (Advanced Level) 1132~1135:1132 模拟 1133模拟(易超时!) 1134图 1135红黑树

    1132 Cut Integer(20 分) 题意:将一个含K(K为偶数)个数字的整数Z割分为A和B两部分,若Z能被A*B整除,则输出Yes,否则输出No. 分析:当A*B为0的时候,不能被Z整除,输 ...

  5. 【Winform】键 盘 事 件

    private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e) { , (, (, (, ( }; //回车 Backsp ...

  6. 2018年第九届蓝桥杯【C++省赛B组】(未完)

    第一题 标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容 利用excel更加快捷: 答案是125 ...

  7. Redis详解(五)——主从复制

    Redis详解(五)--主从复制 面临问题 机器故障.我们部署到一台 Redis 服务器,当发生机器故障时,需要迁移到另外一台服务器并且要保证数据是同步的.而数据是最重要的,如果你不在乎,基本上也就不 ...

  8. 063、Java中输出信息

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  9. win10热键体验

    Alt+Tab: 横向显示正在执行的进程 Win+Tab: 3D形式展示正在执行的进程 Win+D:返回桌面(逃领导查电脑和放窥屏尴尬) Win+R: run(直接打开文件开始运行) crtl+Alt ...

  10. 字符设备驱动之LED驱动

    实现 ①编写驱动框架 ②编写硬件实现代码 (在Linux系统下操作硬件,需要操作虚拟地址,因此需要先把物理地址转换为虚拟地址 ioremap()) 如何实现单个灯的操作: 实现方法之一--操作次设备号 ...