题目理解:
比较需要注意的是题目中内外对应分块的处理,一开始可以从所有情况列举开始考虑
最后合并能推出
(a1-1)/n/gcd(n,m)==(a2-1)/n/gcd(n,m)
然后求最大公因数可以
直接调用gcd或者__gcd 头是 而不是
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int q;
ll n,m,k[3],a1,a2,b1,b2;
int main(){
cin>>n>>m>>q;
k[1]=n/gcd(n,m);k[2]=m/gcd(n,m);
//gcd使用原因
//分别是内外两部分中可以互相走动的所涉及的块数
while(q--){
cin>>b1>>a1>>b2>>a2;
if((a1-1)/k[b1]==(a2-1)/k[b2])cout<<"YES\n";
//核心。
//输入y坐标的时候就默认考虑了均分块数的情况,直接调用y即可
//同时要注意a1-1就不用考虑边界了
else cout<<"NO\n";
}
}