码迷,mamicode.com
首页 > 其他好文 > 详细

三进制 处女座的砝码 高精度

时间:2019-04-05 14:02:45      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:表示   space   int   coder   lan   bsp   cos   cout   一个个   

题目链接:https://ac.nowcoder.com/acm/contest/327/C

给你一个数n(非常大,10^1000),问最少要多少个砝码可以将其表示

分析:每个砝码有三种选择,放物体对面,放物体同侧,以及不放,那就可以用三进制表示,不放0,对面1,同侧2.

比如说26,它的三进制是222,则所有222以内的数都可以用1,3,9这三个砝码来表示,但是我们会看到222的实际意义是都放在同侧,那很明显是表示不了的,事实上222可以转化为100-1,意思就是27放在对面,而砝码1放在同侧,这样称出来就是26了,具体怎么话的可以看知乎大佬的回答https://www.zhihu.com/question/30164499

也就是我们的三进制事实上使用1,-1,0三个来表示,比如1,3,9,27相加为40,那么40以内的数都可以用这四个砝码来表示。

最后等比数列求和可以循环一个个来,比pow快一些,就是sum*k+1(k是公比)

PS:样例真坑人,故意弄几个不是3的倍数来误导人

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=1<<30;
const int maxn=1e5+7;
const double pi=acos(-1);
const int mod=1e9+7;
int main(){
    long double n,ans=1,sum=1;cin>>n;
    while(sum<n){
        sum=sum*3+1;
        ans++;
    }
    cout<<ans<<endl;
    return 0;
}

 

三进制 处女座的砝码 高精度

标签:表示   space   int   coder   lan   bsp   cos   cout   一个个   

原文地址:https://www.cnblogs.com/qingjiuling/p/10658422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!