CodeForces 1200C Round Corridor

            CODEFORCES-1200C- Round Corridor

题目链接:https://codeforces.com/contest/1200/problem/C

 

题目大意:NULL

解题思路:在内圈中,墙的位置在(1,1/n)(1,2/n)(1,3/n)(1,4/n) ...(1,n/n)在外圈中,墙的位置在(1,1/m)(1,2/m)(1,3/m)(1,4/m)...1,m/m)

对于某些特定的值x总有一堵墙同时存在(1,x/n) (2,x/m)也就是说如果y<x,z>x我们就不能从y到z。

我们使g=gcd(n,m),上述那种特殊的墙位于1/g,2/g..g/g,这种墙把内圈和外圈分为了g组,我们只可能在相同的组内移动,并不能在不同的组内移动。对于一些 x=(1,1/g)

(1,2/g)...(1,n/g) 属于组1 x=(1,n/g+1) (1,n/g+2)...(1,2n/g) 属于组2,依此类推,对外圈同样也是,因此我们只需要判断y/(n/g)是否与z/(m/g)相等即可

#include<iostream>
using namespace std;
const int maxn=1e6+10;
typedef long long ll;
ll n,m,q,sx,sy,ex,ey;
ll gcd(ll x,ll y)
{
    if(y==0)return x;
    else
    return gcd(y,x%y);
}
void solve()
{
    ll s1=n/gcd(n,m);
    ll s2=m/gcd(n,m);
    ll c1,c2;
    if(sx==1)
    c1=(sy-1)/s1;
    else
    c1=(sy-1)/s2;
    if(ex==1)
    c2=(ey-1)/s1;
    else
    c2=(ey-1)/s2;
    if(c1==c2) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
}
int main()
{
    cin>>n>>m>>q;
    while(q--)
    {
        cin>>sx>>sy>>ex>>ey;
        solve();
    }
std::ios::sync_with_stdio(false);
return 0;
}

 

转载于:https://www.cnblogs.com/tombraider-shadow/p/11338120.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值