首页 > 其他 > 详细

hdu 4143 A Simple Problem (变形)

时间:2014-05-05 11:01:09      阅读:392      评论:0      收藏:0      [点我收藏+]

题目

题意:给n,求x;

直接枚举肯定超时, 把给的式子变形, (y+x)(y-x) = n;

令y-x = b, y+x = a;

枚举b, b 的范围肯定是sqrt(n),  y = (a+b)/2;  x = (a-b)/2;

b越大, x越小, 所以倒着枚举b

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     int t, n, a, b, x;
10     scanf("%d", &t);
11     while(t--)
12     {
13         scanf("%d", &n);
14         x = -1;
15         for(b = sqrt(n); b >= 1; b--)
16         {
17             if(n%b==0)
18             {
19                 a = n/b;
20                 if(a>b && (a-b)%2==0)
21                 {
22                     x = (a-b)/2;
23                     break;
24                 }
25             }
26         }
27         printf("%d\n", x);
28     }
29     return 0;
30 }
bubuko.com,布布扣

 

hdu 4143 A Simple Problem (变形),布布扣,bubuko.com

hdu 4143 A Simple Problem (变形)

原文:http://www.cnblogs.com/bfshm/p/3707789.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!