这一天,小Y、小D、小C正在愉快地玩耍。

小Y是个数学家,他一拍脑袋冒出了一个神奇的完全平方数 n。

小D是个机灵鬼,很快从小Y嘴里套出了 a,b都是正整数。

小C是个八卦狂,他发现小D从小Y那里获知了神奇的东西,于是死缠烂打追问小D。最后小D说道:“我可以告诉你正整数 a,b 我可不能告诉你。”

这可急坏了小C。他决定退而求其次,找出a+b的最小值和最大值。请你帮帮他吧!

输入格式

第一行一个正整数 T 组询问。

接下来 g,l 表示一组询问。

输出格式

对于每个询问输出一行两个正整数,分别表示 a+b 的最小值与最大值。保证问题有解。

C/C++ 输入输出 long long 时请用 %lld。C++ 可以直接使用 cin/cout 输入输出。

样例一

input

1
1 4

output

4 5

explanation

只有三组解:{a=1,b=4},{a=2,b=2},{a=4,b=1}。

样例二

input

1
2 8

output

8 10

限制与约定

测试点编号 g,l
1 ≤103
2
3
4 ≤109
5
6
7 ≤1018
8
9
10

保证 T≤5。

 

 

正解:数学

解题报告:

  水题,直接yy一下就可以想到了。注意先转成long double!!!

  

 

 1 //It is made by jump~
 2 #include <iostream>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <cstdio>
 6 #include <cmath>
 7 #include <algorithm>
 8 #include <ctime>
 9 #include <vector>
10 #include <queue>
11 #include <map>
12 #include <set>
13 #ifdef WIN32   
14 #define OT "%I64d"
15 #else
16 #define OT "%lld"
17 #endif
18 using namespace std;
19 typedef long long LL;
20 LL a,b;
21 
22 inline int getint()
23 {
24        int w=0,q=0;
25        char c=getchar();
26        while((c<'0' || c>'9') && c!='-') c=getchar();
27        if (c=='-')  q=1, c=getchar();
28        while (c>='0' && c<='9') w=w*10+c-'0', c=getchar();
29        return q ? -w : w;
30 }
31 
32 inline LL getlong()
33 {
34        LL w=0,q=0;
35        char c=getchar();
36        while((c<'0' || c>'9') && c!='-') c=getchar();
37        if (c=='-')  q=1, c=getchar();
38        while (c>='0' && c<='9') w=w*10+c-'0', c=getchar();
39        return q ? -w : w;
40 }
41 
42 inline void work(){
43     int T=getint();
44     while(T--){
45     a=getlong(); b=getlong(); 
46     long double ans=(long double)a*(long double)b; ans=sqrt(ans); 
47     printf("%lld ",(LL)ans*2); ans=(long double)a+(long double)b;
48     printf("%lld\n",(LL)ans);
49     }
50 }
51 
52 int main()
53 {
54   work();
55   return 0;
56 }

 

相关文章: