题目链接:
1.luogu
2.codeforces

这道题要用到gcd,gcd的倍数是里外两层都是墙的情况了

看着各位大佬都在手写gcd,然而我比赛的时候忘了gcd该怎么手写了怎么办?
这时候就只能algorithm库中的__gcd来救你了。

Note: __gcd兹磁long long,所以可以直接使用

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,q;
ll gcdnm;
int main() {
scanf("%I64d%I64d%I64d",&n,&m,&q);
long long sx,sy,ex,ey;
gcdnm=__gcd(n,m);
n/=gcdnm;m/=gcdnm;
for(int i=1;i<=q;i++) {
scanf("%I64d%I64d%I64d%I64d",&sx,&sy,&ex,&ey);
if(sx==1 && ex==1) { //都是里层
if((sy-1)/n==(ey-1)/n) printf("YES\n"); //-1的原因是方便int的计算,int自动向零取整
else printf("NO\n");
}
else if(sx==1 && ex==2) { //一个里层,一个外层
if((sy-1)/n==(ey-1)/m) printf("YES\n");
else printf("NO\n");
}
else if(sx==2 && ex==1) { //一个外层,一个里层
if((sy-1)/m==(ey-1)/n) printf("YES\n");
else printf("NO\n");
}
else if(sx==2 && ex==2) { //都是外层
if((sy-1)/m==(ey-1)/m) printf("YES\n");
else printf("NO\n");
}
}
return 0;
}

Note: NOIP不能使用下标开头的函数,但是考试的时候你可以去编译器里面找到__gcd是怎么写的。