题解
2024-03-17 20:33:43
发布于:陕西
#include<bits/stdc++.h>
using namespace std;
#define in inline
#define ll long long
in ll read()
{
ll w=0,r=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')r=-1;
ch=getchar();
}
while(isdigit(ch))
{
w=(w<<1)+(w<<3)+(ch^48);
ch=getchar();
}
return w*r;
}
in ll gcd(ll x0,ll y0) //最大公约数 用于约分
{
return y0?gcd(y0,x0%y0):x0;
}
ll a,b,x,y,a1,b1,ansa,ansb; //a,b,x,y 为题目中所描述的。a1,b1 为 a,b 的备份。ansa,ansb 为最终结果。
int main()
{
// freopen(".in","r",stdin);
a=read();
a1=a;
b=read();
b1=b;
x=read();
y=read();
ll k=gcd(x,y);
x/=k;
y/=k;
if(x>a||y>b)
{
puts("0 0");
return 0;
}
a=(a/x)*x; //a 取能取的最大值时
b=(a/x)*y;
if(a<=a1&&b<=b1) //是否符合要求
{
ansa=a;
ansb=b;
}
a=a1;
b=b1;
b=(b/y)y; //b 取能取的最大值时
a=(b/y)x;
if(a<=a1&&b<=b1)
{
if(ansaansb<ab) //取更大的那一个
{
ansa=a;
ansb=b;
}
}
cout<<ansa<<" "<<ansb<<endl;
return 0;
}
这里空空如也
有帮助,赞一个