HDU5924-Mr. Frog’s Problem

来源:互联网 发布:托福tpo模考软件mac版 编辑:程序博客网 时间:2024/05/22 05:32

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
210 109 27
 

Sample Output
Case #1:110 10Case #2:29 2727 9
 

Source
2016CCPC东北地区大学生程序设计竞赛 - 重现赛
 

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 longint 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;}

原创粉丝点击