codeforces Div2 C - Round Corridor(思维题)

codeforces C - Round Corridor(思维题)

题目

http://codeforces.com/contest/1200/problem/C

题意

给你n,m,q。n代表内圈平均分成n份,m代表外圈平均分成m份,每份之间有个墙堵着,内外圈之间没有墙。
接下来q次询问,问你(x0,y1)和(x1,y1)之间是否连通。
在这里插入图片描述

题解

通过观察我们可以发现:n走廊每 n/gcd 块区域 和 m走廊每 m/gcd块区域一定可以互通, 其他的一定会隔绝,判断两个位置属不属于同一块区域就可以了,这里注意y0和y1要减小一个单位。

代码

#include<stdio.h>
#define ll long long
ll gcd(ll a,ll b)
{
	while(b^=a^=b^=a%=b);
	return a;
}
int main()
{
	ll n,m;
	int q;
	scanf("%lld %lld %d",&n,&m,&q);
	ll nn = n/gcd(n,m);
	ll mm = m/gcd(n,m);
	while(q--)
	{
		ll x0,y0,x1,y1;
		ll a,b;
		scanf("%lld %lld %lld %lld",&x0,&y0,&x1,&y1);
		y0--,y1--;
		if(x0 == 1)
			a = y0/nn;
		else
			a = y0/mm;
		if(x1 == 1)
			b = y1/nn;
		else
			b = y1/mm;
		if(a == b)
			puts("YES");
		else
			puts("NO");
	}
	return 0;
}
发布了51 篇原创文章 · 获赞 16 · 访问量 3367

猜你喜欢

转载自blog.csdn.net/weixin_43911945/article/details/99414960
今日推荐