Codeforces - 578C Round Corridor(数学 + 模拟)

Codeforces - 578C Round Corridor(数学 + 模拟)_第1张图片
Codeforces - 578C Round Corridor(数学 + 模拟)_第2张图片
题目理解:
比较需要注意的是题目中内外对应分块的处理,一开始可以从所有情况列举开始考虑
最后合并能推出
(a1-1)/n/gcd(n,m)==(a2-1)/n/gcd(n,m)
然后求最大公因数可以

直接调用gcd或者__gcd 头是 而不是

#include
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";
	}
}

你可能感兴趣的:(CodeForces)