HDU5924-Mr. Frog’s Problem

216 篇文章 0 订阅

Mr. Frog’s Problem

                                                                              Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
                                                                                                         Total Submission(s): 1199    Accepted Submission(s): 685


Problem Description
One day, you, a clever boy, feel bored in your math class, and then fall asleep without your control. In your dream, you meet Mr. Frog, an elder man. He has a problem for you.

He gives you two positive integers A and B, and your task is to find all pairs of integers (C, D), such that  ACB,ADB  and  AB+BACD+DC
 

Input
first line contains only one integer T ( T125 ), which indicates the number of test cases. Each test case contains two integers A and B ( 1AB1018 ).
 

Output
For each test case, first output one line "Case #x:", where x is the case number (starting from 1). 

Then in a new line, print an integer s indicating the number of pairs you find.

In each of the following s lines, print a pair of integers C and D. pairs should be sorted by C, and then by D in ascending order.
 

Sample Input
  
  
2 10 10 9 27
 

Sample Output
  
  
Case #1: 1 10 10 Case #2: 2 9 27 27 9
 

Source
 

Recommend
wange2014
 


题意:给你两个正整数A和B,要求找出所有的整数对(C,D),满足A≤C≤B,A≤D≤B且A/B+B/A≤C/D+D/C

解题思路:假设D≥C

令D=C+k(k≥0)


由上式可知,当k越大,C越小时,D/C+C/D越大

∵A≤C≤B ∴C(min)=A

此时,当k达到最大时,即为D(max)=B,C/D+D/C恰好等于A/B+B/A

故满足A/B+B/A≤C/D+D/C的解仅有A==C&&B==D||A==D&&B==C

而当A==B时,解唯一,即A==B==C==D


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <math.h>
#include <time.h>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>

using namespace std;
const int INF = 0x3f3f3f3f3f;
#define LL long long

int main()
{
	int t,cas=0;
	scanf("%d", &t);
	while (t--)
	{
		LL a,b;
		scanf("%lld%lld", &a,&b);
		printf("Case #%d:\n",++cas);
		if (a == b) printf("1\n");
		else printf("2\n");
		if (a > b) swap(a, b);
		if (a == b) printf("%lld %lld\n", a, b);
		else
		{
			printf("%lld %lld\n", a, b);
			printf("%lld %lld\n", b, a);
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值