[CF689C] Mike and Chocolate Thieves - 二分

Posted mollnn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CF689C] Mike and Chocolate Thieves - 二分相关的知识,希望对你有一定的参考价值。

Description

给定正整数 $ n $,找一个最小正整数 $ t $,使得在 $ t $ 内有 $ n $ 组公比为整数的等比数列成立,(n le 10^{15})

Solution

倒过来显然是好做的,而答案又是单调的,考虑二分

检验时,我们可以枚举公比来计数

#include <bits/stdc++.h>
using namespace std;

#define int long long
int n;

signed main() {
    cin>>n;
    int l=1,r=1e18;
    while(l<r) {
        int mid=(l+r)/2;
        int sum=0;
        for(int i=2;i*i*i<=mid;i++) {
            sum+=mid/(i*i*i);
        }
        if(sum<n) l=mid+1;
        else r=mid;
    }
    int sum=0,mid=r;
    for(int i=2;i*i*i<=mid;i++) {
        sum+=mid/(i*i*i);
    }
    if(sum==n) cout<<r;
    else cout<<-1;
}

以上是关于[CF689C] Mike and Chocolate Thieves - 二分的主要内容,如果未能解决你的问题,请参考以下文章

CF 547E Mike and Friends

CF547D Mike and Fish 建图

CF Round410 C. Mike and gcd problem

CF 547 D. Mike and Fish

CF547E Mike and Friends

cf547D. Mike and Fish(欧拉回路)