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.
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.
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
YES
YES
YES
NO
好吧,这个是用了枚举,但问题是在使用枚举时,我们一定要知道要枚举的东西是什么,有哪些,要不然还真是没法做。好吧,这个是看了别人的代码才知道要枚举什么的。。。。
因为所有碎片都是相同的矩形,所以当矩形排列横竖不同时,一行或列会能够整除小矩形的长和宽。
#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;
}
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;
}