Codeforces Round #578 (Div. 2) C - Round Corridor 【数论+规律】
题目:http://codeforces.com/contest/1200/problem/C
大致题意:
12点钟方向固定有一堵墙,内圈、外圈相邻区域有墙,内外圈之间没有墙,给你起点和终点坐标,问你能不能到达终点。
思路:
设 n和m的最大公约数为gcd ,无法通过的墙会出现在 n 或 m / gcd 的位置。
代码部分:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll g_cd(ll a, ll b) {
while(b^=a^=b^=a%=b);
return a;
}
int main() {
ll m, n, q;
cin >> n >> m >> q;
ll gd = g_cd(n, m);
//无法通过的墙的位置
ll mm = m / gd, nn = n / gd;
while(q--) {
ll x1,x2,y1,y2;
cin >> x1 >> y1 >> x2 >> y2;
//以边作为起点
y1--;
y2--;
ll r1, r2;
//判断起点在内圈还是外圈,以及墙的位置
if(x1 == 1)
r1 = y1 / nn;
else
r1 = y1 / mm;
//判断终点在内圈还是外圈 以及墙的位置
if(x2 == 1)
r2 = y2 / nn;
else
r2 = y2 / mm;
if(r1 == r2)
puts("YES");
else
puts("NO");
}
return 0;
}