【2017年浙江工业大学大学生程序设计迎新赛决赛】 F 栗酱的不等式【二分枚举】

来源:互联网 发布:软件去广告教程 编辑:程序博客网 时间:2024/04/30 07:43

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
有不等式y⋅x3≤ n,已知y为正整数,x为大于1的正整数,问当x和y的解数量刚好为m的时候n的最小值,如果不存在输出 -1。
输入描述:
多组数据读入。
每组数据一个数字m,如题所示。
输出描述:
每组数据输出一行,输出答案。
示例1
输入

1
输出

8
说明

当方案恰好只有一种的时候,n的最小值为8,此时y=1,x=2。
备注:
1 ≤ m ≤ 1016

分析: 思路很明确,就是二分。
我们二分枚举n,然后问题就转化为对于 y⋅x3≤ n 有多少个解,一开始想着枚举y,然后再枚举x既不好弄也不好写。然后又更改为枚举x ,这样的话对于 不同的x取值,那么对应的解的个数为 floor( n / ( x*x*x ) )个 。
代码

#include<bits/stdc++.h>using namespace std;#define ull unsigned long longconst int MAXN = 1e5 ;const ull inf  = 100000000000000000uLL;void solve(ull m){    ull ans=0;    ull le=8,ri=inf;    while(le<=ri){        ull mid= (le+ri)>>1;        ull sum=0;        for(ull i=2;i*i*i<=inf;i++) {            if( mid/(i*i*i) ) sum+=(mid/(i*i*i));            else break;        }        if(sum==m) ans=mid;        if(sum<m) le=mid+1;        else            ri=mid-1;    }    if(ans==0) puts("-1");    else  printf("%llu\n",ans);}int main(){    ull m;    while(scanf("%llu",&m)!=EOF){        solve(m);    }return 0 ;}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 九月初八 初一月考作文 8月初8 初一月考 豆蔻梢头二月初 9月初 初三月考反思 九月初十 九月初 十月结晶和子初哪个好 子初和十月结晶哪个好 初一月考数学必考题 十月结晶和子初 初一月考试卷 十月初十 初三月考作文 农门巧厨娘姜初月 朝桄桐全集 朝桄桐作品在线播放 朝桄桐光优在线播放 桄榔 朝桄桐超清播放 朝桄桐办公室在线播放 朝桄桐在线播放 桄榔粉 朝桄桐高清激烈 桄怎么读 朝桄桐高清 朝桄桐试炼在线播放 朝桄桐办公室 朝桄桐高清黑人 朝桄桐作品在线手机 朝桄桐所有作品 钢铁虫潮 桭桄 于立桄 朝桄桐所有作品在线播放 部长太太朝桄桐在线播放 朝桄桐经典作品在线播放 朝桄桐作品在线播放2019 朝桄桐和黑人在线播放神马