HDU 4143--卡时间
2015-05-31 19:36
232 查看
题意:给定n,求能找到y使 y^2 = n + x^2 成立的最小的x
分析:把n拆成两个数的乘积 n = a*b,则 y = (b+a)/2 ,x = (b-a)/2。暴力枚举a,b找到满足(b+a)%2==0,(b-a)%2==0,且(b-a)>0的最小值即可。不过会超时,所以适当处理一下:由于x必须大于零,所以枚举的b必须大于a,而且要满足 | b-a | 最小(因为求最小值),所以从sqrt(n)枚举到1就可以了。
代码:
分析:把n拆成两个数的乘积 n = a*b,则 y = (b+a)/2 ,x = (b-a)/2。暴力枚举a,b找到满足(b+a)%2==0,(b-a)%2==0,且(b-a)>0的最小值即可。不过会超时,所以适当处理一下:由于x必须大于零,所以枚举的b必须大于a,而且要满足 | b-a | 最小(因为求最小值),所以从sqrt(n)枚举到1就可以了。
代码:
#include<iostream> #include<cmath> using namespace std; int n,t,ans; int main() { cin>>t; while(t--){ ans=-1; cin>>n; int tmp=sqrt(n); for(int i=tmp;i>=1;i--){ if(n%i==0){ int j=n/i; if((i+j)%2==0&&(j-i)>0&&(j-i)%2==0){ ans=(j-i)/2;break; } } } cout<<ans<<endl; } }
相关文章推荐
- socket的listen()的backlog参数和未完成队列、已完成队列的关系
- 2015 百度之星 1002 找连续数 暴力
- MySQL SQL 注入
- Lloyd's algorithm and Vorlonoi Diagram
- sgu244:Height, Bisector and Median(几何)
- 东航航空货运系统(三)设计登陆界面与验证登陆
- Java NIO 04=====Scatter/Gather
- 将Image类型的图片文件保存到Mysql数据库
- 连接字符串应优先使用join而不是+
- 会员卡管理系统技术解析(十) 会员卡领卡记录添加
- hibernate注解创建表总是失败,显示表不存在
- 于cookie 和session 的理解
- Java NIO 03=====Buffer
- linux 初始化工作环境
- Scikit Source Code Rea 4000 ding(2015.05.31)
- Android开发--Facebook酷炫开源库Shimmer使用
- 我爱淘冲刺阶段站立会议2每天任务3
- Redis 学习笔记四 Mysql 与Redis的同步实践
- ITOO——Jenkins持续集成
- 函数化继承