3520 - 使命召唤
我们的小明又来了,他在N次排位赛碰到最强王者大神然后被吊打之后,决定换一个游戏,看起来《使命召唤》不错。
但是他的屏幕分辨率有点奇怪,总是达不到标准的分辨率比例。比如现在流行的是16:9,可是他屏幕的分辨率经常是1920*1200这种非标准版本的,会导致游戏无法正常运行。为了适应16:9的比例,他会手动调整到1920*1080,虽然这样会导致屏幕有黑边,但是起码保持了比例(射击的时候不容易误判),而且这样黑边最小,可视面积最大。
现在问题来了。给出小明当前屏幕的分辨率和要求的比例,输出他能够手动调整的最大分辨率。如果没有办法调整……比如分辨率是1*1,但是游戏要求的比例是1:2(当然,只是举个例子),他就没有办法调整了,这个时候,输出0 0.
提示:这个题目可能会导致结果超出32位整形数,所以定义变量的时候请用long long类型代替int类型。比如:
long long a,b; //long long 类型最大支持到2的64次方,用法和int相同。
a=8423789598432;
题目输入
第一行为组数T(保证1<T<50)。
对于每组数据,在一行中输入4个数字,前两个数字代表当前的分辨率,后两个数字代表屏幕要求的分辨率比例。
题目输出
在单独的一行中输出小明能够手动调整的最大分辨率。如果有多种方案,输出分辨率面积最大的1种,如果没有方案,输出0 0
输入/输出样例
题目输入
3 800 600 4 3 1920 1200 16 9 1 1 1 2
题目输出
800 600 1920 1080 0 0
C++解答
#include <cstdio> #include <algorithm> #include <iostream> #include <fstream> using namespace std; int gcd(int a,int b){ if(b==0) return a; else return gcd(b,a%b); } int main(){ int a,b,x,y,g; // ifstream cin; // ofstream cout; // cin.open("h.in"); // cout.open("h.out"); int testcase; cin>>testcase; while(testcase--) { cin>>a>>b>>x>>y; g=gcd(x,y); x/=g; y/=g; g=std::min(a/x,b/y); cout<<x*g<<" "<<y*g<<endl; } return 0; }