Problem Description
Running a paper shop is not an easy job, especially
with harsh customers. Today they brought their own rectangular sheets of paper,
asking you to cut it into rectangular business cards of specific
size.
Moreover, they require that all the paper (which may not be cheap,
but is definitely not that expensive!) has to be used, i.e. no tiny bit may be
left over.
Moreover, the brilliant idea of cutting the sheet into very
small pieces, and then gluing them together in desired sheets was laughed
at.
An example of a 9 *6 paper sheet divided into 2 * 3 cards is given
below.

Input
The input contains several test cases. The first line
contains the number of test cases t (t <= 10^5). Then t test cases follow.
Each of them consists of one line containing four integers a, b, c, d (1
<=a, b, c, d <= 10^9).
Numbers a and b are dimensions of each
business card; c and d are dimensions of the paper sheet.
Output
For each test case output one line containing word
YES if it is possible to divide the whole sheet into business cards, and NO
otherwise.
Sample Input
4 2 3 9 6 2 3 8 6 2 3 6
8 2 3 5 7
Sample Output
好吧,这个是用了枚举,但问题是在使用枚举时,我们一定要知道要枚举的东西是什么,有哪些,要不然还真是没法做。好吧,这个是看了别人的代码才知道要枚举什么的。。。。
因为所有碎片都是相同的矩形,所以当矩形排列横竖不同时,一行或列会能够整除小矩形的长和宽。
#include<iostream>
using namespace
std;
bool jud(int a, int b, int z) {
int x = 1;
while(a * x < z)
{
if((z - a *
x) % b == 0) {
return
true;
}
x++;
}
return false;
}
bool judge(int x,int y,int m,int
n)
{
if(m % x==0 && n %
y==0)
return
true;
if(m % y==0 && n %
x==0)
return
true;
if(m % y==0 && m % x==0 &&
jud(x,y,n))
return
true;
if(n % y==0 && n % x==0 &&
jud(x,y,m))
return
true;
return false;
}
int
main()
{
int n;
while(cin>>n)
{
while(n--)
{
int
x,y,m,n;
cin>>x>>y>>m>>n;
if(judge(x,y,m,n))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
return
0;
}
Business Cards,布布扣,bubuko.com
Business Cards
原文:http://www.cnblogs.com/zhaoxinshanwei/p/3675438.html