【UER #1】猜数

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

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

小D是个机灵鬼,很快从小Y嘴里套出了 n 的值。然后在脑内把 n 写成了 a×b的形式。其中 a,b都是正整数。

小C是个八卦狂,他发现小D从小Y那里获知了神奇的东西,于是死缠烂打追问小D。最后小D说道:“我可以告诉你正整数 g 和 l 的值,我保证 ab=gl=n 且 a,b 都是 g的倍数。但是 a,b 我可不能告诉你。”

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

输入格式

第一行一个正整数 T,表示有 T 组询问。

接下来 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

保证 T≤5。

时间限制:1s

空间限制:256MB

题解

UOJ自带题解:

算法一

直接暴力枚举所有可能的 a,b 然后判定。可以得30分。

算法二

由于 a,b 都是 g 的倍数,而 ab=gl=n,所以当然 l 也是 g 的倍数。

既然如此,我们可以暴力枚举所有 l/g=st 的拆分,然后 a=gs,b=gt。

于是暴力枚举所有 l/g 的约数,是 O(l/g−−−√) 的。可以得60分。

算法三

其实根本不用枚举约数。

考虑最小值。只看 n=ab 这个限制,根据均值不等式,最小值显然在 {a=n−√,b=n−√} 时取到。而根据题目条件,这显然是一组合法解。所以最小值就是 2gl−−√。

考虑最大值。只看 n=ab,a≥g 这两个限制。显然最大值在 {a=g,b=l} 时取到。而根据题目条件,这显然是一组合法解。所以最大值就是 g+l。

这样好好写就能获得 100 分。

精度问题

有人可能会写:

ans_min = (long long)sqrt((double)g * l);

这样会被卡精度,因为double大概只有15位10进制有效数字。只能得到60分。

解决方法是:

ans_min = (long long)sqrt(l / g) * g;

当然有人可能直接long double保平安了……

代码

int main()
{
int t;
cin>>t;
while(t--)
{
LL g,l;
cin>>g>>l;
cout<<2*(long long)sqrt((long double)g*l)<<" "<<g+l<<endl;
}
return 0;
}

UOJ 12 猜数 数学题的更多相关文章

  1. 【UER #1】[UOJ#12]猜数 [UOJ#13]跳蚤OS [UOJ#14]DZY Loves Graph

    [UOJ#12][UER #1]猜数 试题描述 这一天,小Y.小D.小C正在愉快地玩耍. 小Y是个数学家,他一拍脑袋冒出了一个神奇的完全平方数 n. 小D是个机灵鬼,很快从小Y嘴里套出了 n的值.然后 ...

  2. [UOJ 12]猜数

    Description

  3. uoj problem 12 猜数

    题目大意 每次询问给出g,l,有\(a*b = g*l = n\),且\(a,b\)均为\(g\)的倍数.求\(a+b\)的最小值和\(a-b\)的最大值. 题解 因为\(a,b\)均为\(g\)的倍 ...

  4. 【BZOJ 1594】 [Usaco2008 Jan]猜数游戏 (二分+并查集)

    1594: [Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面 ...

  5. 【BZOJ1594】[Usaco2008 Jan]猜数游戏 二分答案+并查集

    [BZOJ1594][Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在 ...

  6. bzoj 1594: [Usaco2008 Jan]猜数游戏——二分+线段树

    Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面摆N(1 <= N<= 1,000,00 ...

  7. 【bzoj1594】猜数游戏

    1594: [Usaco2008 Jan]猜数游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 556  Solved: 225 Descripti ...

  8. 剑指Offer - 九度1360 - 乐透之猜数游戏

    剑指Offer - 九度1360 - 乐透之猜数游戏2014-02-05 19:54 题目描述: 六一儿童节到了,YZ买了很多丰厚的礼品,准备奖励给JOBDU里辛劳的员工.为了增添一点趣味性,他还准备 ...

  9. BZOJ 1594 [Usaco2008 Jan]猜数游戏(线段数)

    1594: [Usaco2008 Jan]猜数游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 626  Solved: 260[Submit][S ...

随机推荐

  1. Qt软件打包发布(QT5.4.1(msvc2013_64_opengl),Win7 64bit)

    环境:QT5.4.1(msvc2013_64_opengl),Win7 64bit 编译方式 Qt开发的程序发布的时候经常采用两种方式:1)静态编译,可生成单一的可执行文件:2)动态编译,需同时附上需 ...

  2. java 二叉树遍历

    package com.lever; import java.util.LinkedList;import java.util.Queue; /** * 二叉树遍历 * @author lckxxy ...

  3. php rabbitmq的扩展

    1.下载:https://github.com/alanxz/rabbitmq-c/archive/v0.9.0.tar.gz mkdir build && cd build # 这一 ...

  4. 洛谷P2886牛继电器

    传送门啦 倍增 $ Floyd $ 注意结构体里二维数组不能开到 $ 2000 $ #include <iostream> #include <cstdio> #include ...

  5. sqlserver中的循环遍历(普通循环和游标循环)(转载)

    sql 经常用到循环,下面介绍一下普通循环和游标循环 1.首先需要一个测试表数据Student

  6. SQL中EXCEPT和Not in的区别?

    初始化两张表: CREATE TABLE tb1(ID int) INSERT tb1          SELECT NULLUNION  ALL          SELECT NULLUNION ...

  7. Dev控件删除按钮的两种方式

    测试版本15.2.10:在Dev控件中删除按钮空间有两种方式:1.鼠标右键出现Delete选项,这种删除是不完全的删除,只是删除了按钮的显示,实际上按钮还是存在于代码中的.2.用键盘上的Delete键 ...

  8. oracle查看所有表及各表行数

    https://zhidao.baidu.com/question/131972827.html

  9. sicily 1198. Substring (递归全排列+排序)

    DescriptionDr lee cuts a string S into N pieces,s[1],…,s[N]. Now, Dr lee gives you these N sub-strin ...

  10. Spark(十二)SparkSQL简单使用

    一.SparkSQL的进化之路 1.0以前:   Shark 1.1.x开始:SparkSQL(只是测试性的)  SQL 1.3.x:          SparkSQL(正式版本)+Datafram ...