• Codeforces Round #219 (Div. 2) B. Making Sequences is Fun


    B. Making Sequences is Fun
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    We'll define S(n) for positive integer n as follows: the number of the n's digits in the decimal base. For example,S(893) = 3S(114514) = 6.

    You want to make a consecutive integer sequence starting from number m (m, m + 1, ...). But you need to payS(nk to add the number n to the sequence.

    You can spend a cost up to w, and you want to make the sequence as long as possible. Write a program that tells sequence's maximum length.

    Input

    The first line contains three integers w (1 ≤ w ≤ 1016), m (1 ≤ m ≤ 1016), k (1 ≤ k ≤ 109).

    Please, do not write the %lld specifier to read or write 64-bit integers in C++. It is preferred to use the cincoutstreams or the %I64d specifier.

    Output

    The first line should contain a single integer — the answer to the problem.

    Sample test(s)
    input
    9 1 1
    output
    9
    input
    77 7 7
    output
    7
    input
    114 5 14
    output
    6
    input
    1 1 2
    output
    0

        多么典型的二分枚举呀,不过需要注意小细节。

    #include <iostream>
    #include <string>
    #include <string.h>
    #include <map>
    #include <stdio.h>
    #include <algorithm>
    #include <queue>
    #include <vector>
    #include <math.h>
    #include <set>
    #define Max(a,b) ((a)>(b)?(a):(b))
    #define Min(a,b) ((a)<(b)?(a):(b))
    using namespace std;
    typedef unsigned long long LL ;
    
    LL  dp[19] ;
    LL  num[19] ;
    
    void init(){
         num[1] = 1 ;
         for(int i = 2 ; i <= 19 ; i++)
            num[i] = num[i - 1] * 10 ;
         for(int i = 1 ; i <= 18 ; i++)
            dp[i] = i * (num[i+1] - num[i]) ;
    }
    
    LL get_all_S(LL x){
       LL sum = 0 ;
       int i ;
       for(i = 2 ; i <= 18 ; i++){
          if(x >= num[i])
            sum += dp[i-1] ;
          else
            break ;
       }
       sum += (i-1)*(x-num[i-1]+1) ;
       return sum ;
    }
    
    LL M ,W , K;
    
    int judge(LL x){
        return W >= K*(get_all_S(x) - get_all_S(M-1)) ;
    }
    
    LL calc(){
        LL L ,R ,mid , ans = -1;
        L = M ;
        R = (LL)1000000000000000000 ;
        while(L <= R){
            mid = (L + R) >> 1 ;
            if(judge(mid)){
                ans = mid ;
                L = mid + 1 ;
            }
            else
                R = mid -1 ;
        }
        return ans==-1?0:ans - M + 1 ;
    }
    
    int main(){
        init() ;
        LL x ;
        while(cin>>W>>M>>K){
            cout<<calc()<<endl ;
        }
        return 0 ;
    }
  • 相关阅读:
    交换机、集线器、路由器区别(转)
    64位RHEL5系统上运行yum出现"This system is not registered with RHN”的解决方法
    war包和jar包的区别【转】
    jQuery选择器
    jQuery中"$"的理解
    Eclipse maven项目中使用mybatis逆向工程
    Maven下出现Cannot change version of project facet Dynamic Web module to 2.5.
    Eclipse Maven项目出现“The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path”
    @ResponseBody的理解【转】
    Mybatis Generator最完整配置详解
  • 原文地址:https://www.cnblogs.com/liyangtianmen/p/3474109.html
Copyright © 2020-2023  润新知