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 A≤C≤B,A≤D≤B and AB+BA≤CD+DC
He gives you two positive integers A and B, and your task is to find all pairs of integers (C, D), such that A≤C≤B,A≤D≤B and AB+BA≤CD+DC
Input
first line contains only one integer T (
T≤125
), which indicates the number of test cases. Each test case contains two integers A and B (
1≤A≤B≤1018
).
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.
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;
}