jrMz and angles
Accepts: 594
Submissions: 1198
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
大水体,直接试一下就行了。。。
官方解:
不妨令n≤m。
如果n>6,由于所有角都大于120度且小于180度,也就是说,两个角一定不够,而三个角一定过多。因此一定无解;
当n≤6时,如果n=3或n=4或n=6,那么显然只需要正n边形的角就可以了。如果n=5,则已经有一个108度的角。若这种角:不取,则显然仅当m=6时有解;取1个,则还差360−108=252(度),但是没有一个正m边形的内角的度数是252的约数;取2个,则还差360−108×2=144(度),这恰好是正10边形的内角,取3个,则还差360−108×3=36(度),也不可能满足;取大于3个也显然不可能。
因此得到结论:当n和m中至少有一个为3或4或6时,或者当n和m中一个等于5另一个等于10时,有解,否则无解,时间复杂度为
O(T)。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<map>
#include<set>
#include<ctime>
#define eps 1e-6
#define MAX 100005
#define INF 0x3f3f3f3f
#define LL long long
#define pii pair<string,int>
#define rd(x) scanf("%d",&x)
#define rd2(x,y) scanf("%d%d",&x,&y)
const int dir[][2] = { {-1, 0}, {0, -1}, { 1, 0 }, { 0, 1 } };
using namespace std;
int gcd (int a,int b){
int temp;
while(a/b!=0){
temp=a;
a=b;
b=a%b;
}
return b;
}
int main()
{
int T;
int a ,b;
scanf("%d",&T);
while(T--)
{
rd2(a,b);
int mark=0;
int zi1=(a-2)*b,zi2=(b-2)*a;
int mu = a*b;
for(int i=0;i<=10;i++)
for(int j=0;j<=10;j++){
if((zi1*i+zi2*j)%(a*b)==0&&(zi1*i+zi2*j)/(a*b)==2)
mark=1,i=10,j=10;
//cout<<"ssssssssss"<<endl;
}
if(mark)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
浙公网安备 33010602011771号