1 条题解

  • 0
    @ 2025-8-24 23:01:41

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar ScaredQiu
    Life Still Left In Me

    搬运于2025-08-24 23:01:41,当前版本为作者最后更新于2024-02-25 22:40:03,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    数学、位运算

    呼和浩特的小 R 是 RyanLi,另外 shinzanmono 也住在呼和浩特。


    题目等价于询问是否存在正整数 xx 使得 mmxx 的异或和为 nn

    测试点 121 \sim 2

    此时只有 n=0n=0

    观察发现当 mm 为奇数时无法得到 00mm 为偶数时任意 mm 个相同正整数异或得到的结果都是 00

    • mm 为偶数时输出 Yes,否则输出 No

    测试点 343 \sim 4

    此时只有 m=2m=2m=3m=3

    考虑 m=2m=2 的情况,对于任意正整数 xx,由于 xxxx 的每个二进制位都相同,所以 xx=0x \oplus x=0。因而能得到的整数只有 00

    考虑 m=3m=3 的情况,由于 xxx=0x=xx \oplus x \oplus x=0 \oplus x=x。故可以得到任意正整数,只有 00 无法被得到。

    • m=2m=2 时,若 n=0n=0 输出 Yes,否则输出 No
    • m=3m=3 时,若 n0n \neq 0 输出 Yes,否则输出 No

    测试点 55

    因为 xx=0x \oplus x=0x0=xx \oplus 0=xm2m \geq 2,所以当 m>3m > 3mm 个相同正整数的异或等于 m2m-2 个相同正整数的异或。

    $$\underbrace{x \oplus x \oplus x \oplus \cdots \oplus x}_{m\ 个\ x} = 0 \oplus \underbrace{x \oplus \cdots \oplus x}_{m-2\ 个\ x} = \underbrace{x \oplus \cdots \oplus x}_{m-2\ 个\ x} $$

    更进一步地,当 mm 为奇数时 mmxx 的异或等于 33xx 的异或;当 mm 为偶数时 mmxx 的异或等于 22xx 的异或,即 00。因此:

    • mm 为偶数且 n=0n=0,输出 Yes
    • mm 为奇数且 n0n \neq 0,输出 Yes
    • 其余情况输出 No

    单组数据时间复杂度 O(1)O(1)

    #include<bits/stdc++.h>
    using namespace std;
    int T,n,m;
    int main(){
        scanf("%d",&T);
        while(T--){
            scanf("%d%d",&n,&m);
            if(m%2==0&&n==0||m%2==1&&n!=0) puts("Yes");
            else puts("No");
        }
        return 0;
    }
    
    • 1

    信息

    ID
    9969
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者