1 条题解

  • 0
    @ 2026-6-2 23:13:32

    注意到

    该题网格行列环形跳跃相互独立

    依据数论环形遍历结论:在总长为len的环上固定跳cnt步能遍历所有位置的充要条件是gcd(len,cnt)=1

    证明如下

    设环下标模 len\mathit{len},每次增量为 cnt\mathit{cnt},可达位置为 $k\cdot \mathit{cnt}\pmod{\mathit{len}},k\in\mathbb{N}$;记d=gcd(cnt,len)d=\gcd(\mathit{cnt},\mathit{len}),由贝祖定理,xcnt+ylen=dx\cdot \mathit{cnt}+y\cdot \mathit{len}=d存在整数解,所有落点必是 dd 的倍数,即 0,d,2d,0,d,2d,\dots,仅当 d=1d=1 可取遍全部剩余类,故充要条件gcd(len,cnt)=1\gcd(\mathit{len},\mathit{cnt})=1

    两项同时成立则可遍历全部网格输出 Yes,否则输出 No。

    C++

    int main()
    {
        AC;
        int t; cin>>t;
        while(t--)
        {
            ll n,m,a,b;
            cin>>n>>m>>a>>b;
            ll x=gcd(a,n);
            ll y=gcd(b,m);
            if(x==1&&y==1)cout<<"Yes\n";
            else cout<<"No\n";
        }
        return 0;
    }
    

    Python

    import sys,math
    def main():
        i=sys.stdin.read().split()
        t=int(i[0])
        idx=1
        for _ in range(t):
            n=int(i[idx])
            m=int(i[idx+1])
            a=int(i[idx+2])
            b=int(i[idx+3])
            idx+=4
            if math.gcd(a,n)==1 and math.gcd(b,m)==1:
                print("Yes")
            else:
                print("No")
    if __name__=="__main__":
        main()
        
    
    • 1

    信息

    ID
    1165
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    4
    已通过
    3
    上传者