zoukankan      html  css  js  c++  java
  • E

    Time Limit: 2 sec / Memory Limit: 1024 MB

    Score : 500500 points

    Problem Statement

    You are given a positive integer LL in base two. How many pairs of non-negative integers (a,b)(a,b) satisfy the following conditions?

    • a+b≤La+b≤L
    • a+b=a XOR ba+b=a XOR b

    Since there can be extremely many such pairs, print the count modulo 109+7109+7.

    What is XOR?

    Constraints

    • LL is given in base two, without leading zeros.
    • 1≤L<2100 0011≤L<2100 001

    Input

    Input is given from Standard Input in the following format:

    LL
    

    Output

    Print the number of pairs (a,b)(a,b) that satisfy the conditions, modulo 109+7109+7.


    Sample Input 1 Copy

    Copy

    10
    

    Sample Output 1 Copy

    Copy

    5
    

    Five pairs (a,b)(a,b) satisfy the conditions: (0,0),(0,1),(1,0),(0,2)(0,0),(0,1),(1,0),(0,2) and (2,0)(2,0).


    Sample Input 2 Copy

    Copy

    1111111111111111111
    

    Sample Output 2 Copy

    Copy

    162261460

    类似数位dp的dp方法

    dp[i][1]代表第i为被限制时的方法数

    dp[I][0]代表第i未被限制时的方法数

    被限制的话对于下一位我们是不能任意取的

    而不被限制我们则可以根据上一个不被限制的方法*3推得

    我们考虑几种转移情况

    i为1时 可以由限制转移到非限制 而对于限制到限制则可*2推出

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const long long mod=1000000007;
    long long dp[100005][2];
    int main()
    {
        char s[100005];
        cin>>s+1;
        dp[0][1]=1;
        dp[0][0]=0;
        int n=strlen(s+1);
        for(int i=1;s[i];i++)
        {
            dp[i][0]=(dp[i-1][0]*3)%mod;
            if(s[i]=='1')
            {
                dp[i][1]=(dp[i-1][1]*2)%mod;
                dp[i][0]+=dp[i-1][1];
                dp[i][0]=(dp[i][0])%mod;
            }
            else
            {
                dp[i][1]=dp[i-1][1];
            }
        }
        printf("%lld
    ",(dp[n][1]+dp[n][0])%mod);
    }
  • 相关阅读:
    HDU5418.Victor and World(状压DP)
    POJ2686 Traveling by Stagecoach(状压DP)
    POJ3254Corn Fields(状压DP)
    HDU5407.CRB and Candies(数论)
    CodeForces 352D. Jeff and Furik
    CodeForces 352C. Jeff and Rounding(贪心)
    LightOj 1282 Leading and Trailing
    Ural 1057. Amount of Degrees(数位DP)
    HDU 2089 不要62 (数位DP)
    HDU5366 The mook jong (DP)
  • 原文地址:https://www.cnblogs.com/caowenbo/p/11852252.html
Copyright © 2011-2022 走看看