zoukankan      html  css  js  c++  java
  • Codeforces

    https://codeforces.com/problemset/problem/474/D

    这道题挺好的,思路是这样。

    我们要找一个01串,其中0的段要被划分为若干个连续k的0。

    我们设想一个长度为n的合法串是怎么被构造出来的,要么是上一个合法串后面直接连接1,要么是上一个合法串后面连接k个连续的0,那么每个0一一对应于一段连续的0。

    所以dp[i]=dp[i-1]+dp[i-k]。

    想出来就觉得不难了。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    
    int t,k;
    int a,b;
    
    int dp[100005];
    int sum[100005];
    
    int main(){
        scanf("%d%d",&t,&k);
        for(int i=1;i<=k-1;i++){
            dp[i]=1;
        }
        dp[k]=2;
        for(int i=k+1;i<=100000;i++){
            dp[i]=(dp[i-1]+dp[i-k])%1000000007;
        }
    
        for(int i=1;i<=100000;i++){
            sum[i]=(sum[i-1]+dp[i])%1000000007;
        }
    
        for(int i=0;i<t;i++){
            scanf("%d%d",&a,&b);
            printf("%d
    ",(sum[b]-sum[a-1]+1000000007)%1000000007);
        }
    }
  • 相关阅读:
    Python import模块
    Python 内置函数
    Python Pickle序列化
    android xml布局文件属性说明
    android 中动画
    Android样式——Styles
    代码家
    Android UI目录
    Android 基本控件
    android and webview 网页应用
  • 原文地址:https://www.cnblogs.com/Yinku/p/10398173.html
Copyright © 2011-2022 走看看