zoukankan      html  css  js  c++  java
  • 解题报告 Number

     

    1.        题目

    1. Number

    题目描述:

    本题题目描述超简单,大家只需领会精神即可。

    话说小豆豆找到了这样的一道题(不知是数学题还是OI题):

    给定一个正整数N,现在让你求一个X,使得X^X(xx次幂)的位数大于等于NX-1^(X-1)的位数小于N

    这题难住了小豆豆,好纠结呀好纠结!请你们这些无所不能的Oier来帮帮他吧!

    【输入】

    一个数,n

    【输出】

    一个数x,满足xx的位数大于等于nx-1x-1的位数小于n

     

    【样例】

    Number.in

    11

    Number.out

    10

    【数据规模】

     n<=1000000000000000000

    【时间,内存限制】

     各个测试点 1s64M

     

    2.        题目实质  

    找一个满足条件的数。(怎么我总爱说废话)

    3.        算法

    二分 + 一个常识性的结论。

    首先,先说一下这个常识性的结论:

    一个数的位数: trunc(lg(x))+1

    由换底公式得: trunc(ln(x)/ln(10))+1;

    再加上一个 ^x trunc(x*(ln(x))/(ln(10)))+1

    所以,就是这样。

    看看数据范围,再加个二分——> AC

    4.        注意事项

    其实我很想知道这个题究竟恶心到了多少人。

    5.        时空复杂度

    O(log n)

    虽然他的 n 0 很多,不过用二分一样可以过去。

    6.        程序代码

    SueMiller  pascal

     var mid,l,r,tmp,n:int64;

     s:string;  flag:boolean;

    function calc(x:int64):int64;

     begin

      calc:=trunc(x*(ln(x)/ln(10)));

      exit(calc);

     end;

      begin

       assign(input,'Number.in'); reset(input);

       assign(output,'Number.out'); rewrite(output);

       readln(n);

       l:=1; r:=maxlongint*100000000;

       while l<=r do

        begin

         mid:=(l+r) div 2;

         tmp:=calc(mid)+1;  //函数中没有加一,这里加。

         if tmp>=n then begin flag:=true; r:=mid-1 end

          else begin flag:=false; l:=mid+1; end;

        end;

         if flag then writeln(mid) else writeln(mid+1);

         close(input);

         close(output);

       end.

  • 相关阅读:
    团队沟通利器之UML——活动图
    Ninject对Web Api的支持问题
    关于分布式系统的数据一致性问题
    ASP.NET Web开发框架 查询
    用泛型的IEqualityComparer<T> 去除去重复项
    数据库连接监控组件,避免日常开发中因为数据库连接长时间占用或业务完成后忘记关闭连接所带来的数据库问题
    认识项目经理
    状态模式(State Pattern)
    Django框架学习通用视图
    MS CRM 2011 Schedule Service Activities
  • 原文地址:https://www.cnblogs.com/SueMiller/p/2134962.html
Copyright © 2011-2022 走看看