Codeforces Round #196 (Div. 2)B
http://codeforces.com/contest/337/problem/B
题意:给你4个数,a,b,c,d,这四个数分别是两个矩形的长宽之比a:b和c:d,让c:d的矩形尽可能充满a:b的矩形而使得空隙最小,输出空隙与a:b矩形最简比。
思路:如果要使得最大,肯定剩下的空白是矩形,画图就会发现实际上空白:a:b矩形之比可以由c:d矩形和a:b矩形得到,而两个矩形之比实际上就是其中一个边之比,所以,转化成数学问题就是:给你四个数,如果b/a>d/c,就通分分母,如果b/a<d/c,通分分子,如果相等,直接输出0/1,然后所得的分子(或分母)之比就是矩形a;b和矩形c:d的有空白的边长之比,化简相减就能得到结果。
AC代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int gcd(int a,int b) { int r,t; while(b!=0) { r=a%b,a=b,b=r; } return a; } int main() { int a,b,c,d; int t; int x,y; scanf("%d%d%d%d",&a,&b,&c,&d); if(b*c>a*d)x=b*c,y=a*d; else if(b*c<a*d)x=a*d,y=b*c; else if(b*c==a*d){ printf("0/1\n");return 0; } t=gcd(x,y); x/=t,y/=t; printf("%d/%d\n",x-y,x); return 0; }

浙公网安备 33010602011771号