HDU 4282 (比较厉害的 二分)
来源:互联网 发布:淘宝怎么联系客服 编辑:程序博客网 时间:2024/05/02 01:47
题意:
有一个式子: X^Z + Y^Z + XYZ = K,现在给出K,问有多少XYZ的组成方式,
注意条件:X < Y, Z > 1,0 < K < 2^31;
思路:
若想直接暴力解决,需要三重循环,铁超。。。所以现在能不能加速?二分可以,
需要提前准备,如果提前把X^Z和Y^Z的所有情况算出来,那么事半功倍,枚举
X^Z然后查找Y既可。天才般的想法。
#include <iostream>#include <cstdio>#include <cstring>using namespace std;typedef long long LL;const int MAXN = 50005;int ans;LL k;LL a[MAXN][32];int check(LL temp,int x,int z){ int L = x+1,R = 50000,mid; while(L <= R) { mid = (L+R)>>1; if(a[mid][z] == 0) { R = mid - 1; continue; } else if(a[mid][z] + x*mid*z < temp) L = mid + 1; else if(a[mid][z] + x*mid*z > temp) R = mid - 1; else return true; } return false;}int main(){ //freopen("in.txt","r",stdin); for(int i = 1;i <= 50000; i++) { a[i][1] = i; for(int j = 2;j <= 31; j++) { a[i][j] = a[i][j-1]*i; if(a[i][j] > 2147483648LL) break; } } while(scanf("%lld",&k) != EOF) { ans = 0; if(k == 0) break; for(int i = 1;i <= 50005 && i <= k; i++) { for(int j = 2;j <= 31; j++) { if(a[i][j] == 0) break; LL temp = k - a[i][j]; if(k - i*j <= 0) continue; if(check(temp,i,j)) ans++; } } printf("%d\n",ans); } return 0;}
0 0
- HDU 4282 (比较厉害的 二分)
- HDU 1316(大数比较+二分)
- 一个比较厉害的命令(杀死进程)
- 处理样本分布不平衡,偏斜比较厉害的方法总结
- 博客代码大全的主页,厉害厉害
- hdu 4282 爆搜~//二分
- 比较全而且厉害的网站(作者很流弊的样子有木有!)
- 厉害的售货员
- 厉害的售货员
- 厉害!更大的利好!
- 最厉害的人
- 装逼装的很厉害
- hdu 2846 Repository(字典树,内存限制的好厉害)
- HDU 2199 简单的二分
- HDU 4768 二分的运用
- hdu 4777 树状数组这么用好厉害
- 三次比较的二分搜索算法
- 比较规整通用的二分查找
- Android学习研究(四)通过PorterDuffXfermode形成简单的圆角和圆形图片
- 互联网基因
- 58 同城 iOS 客户端组件化演变历程
- iOS开发-UIView之动画效果的实现方法(合集)
- Lectra Formaris v5R1C1\
- HDU 4282 (比较厉害的 二分)
- ORACLE EXECUTE IMMEDIATE 小结
- SQL数据库大量数据查询优化思考点汇总
- java RSA生成公钥对象和私钥对象
- 学习笔记第五周——嵌套if语句之排位大小
- java对象拷贝——PropertyUtils.copyProperties()用法和性能
- Mockito一个用于Java开发的伟大的模拟框架
- Android 蓝牙
- Mybatis简介与原理