zoukankan      html  css  js  c++  java
  • 2020牛客寒假算法基础集训营5 碎碎念

    https://ac.nowcoder.com/acm/contest/3006/F

    题意

      在ACM比赛里,除了CE以外都是有效的提交。每一个提交都会有其评测的结果,或是AC,或是RJ(Rejected,包含各种不通过的情况)。往往一个人上去提交的时候,总有一个队友会坐在边上等着结果。那个人,往往都是只读题不写题的云选手~

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

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

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

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

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

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

    题解

      令dp[i][0]表示到了第 i 句话,是从 i-1 句话AC到达的方案。

         dp[i][1]表示到了第 i 句话,是由 i-k 句话RJ过来的方案。

      由于多组查询,用前缀和维护。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int mod=1000000007;
    int dp[100010][3];
    int main()
    {
        int i,x,q,l,r;
        scanf("%d%d",&x,&q);
    
        dp[0][0]=1;
        for(i=1;i<=100010;i++)
        {
            dp[i][0]=(dp[i-1][0]+dp[i-1][1])%mod;
            if(i>=x)
                dp[i][1]=dp[i-x][0]%mod;
        }
    
        for(i=1;i<=100010;i++)
        {
            if(i==1)
                dp[i][2]=(dp[i][0]%mod+dp[i][1]%mod)%mod;
            else 
                dp[i][2]=((dp[i-1][2]%mod+dp[i][0]%mod)%mod+dp[i][1]%mod)%mod;
        }
    
        while(q--)
        {
            scanf("%d%d",&l,&r);
            printf("%d
    ",(dp[r][2]-dp[l-1][2]%mod+mod)%mod);
        }
        system("pause");
        return 0;
    }
  • 相关阅读:
    用 tableExcel导出EXCEL数据
    个人作业——软件评测
    结对第二次作业——某次疫情统计可视化的实现
    软工实践寒假作业(1/2)
    java注解和反射
    共享密钥
    鲁棒性验证-第五小组
    维数约减报告--第五小组
    网络1911、1912 D&S第1次作业--线性表批改总结
    网络1911、1912 C语言第4次作业--函数批改总结
  • 原文地址:https://www.cnblogs.com/VividBinGo/p/12321522.html
Copyright © 2011-2022 走看看