3520 - 使命召唤

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 256 MB

我们的小明又来了,他在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;
}