1 条题解

  • 0
    @ 2025-8-24 21:21:57

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar xuyixuan_123
    叫我Air/空气

    搬运于2025-08-24 21:21:56,当前版本为作者最后更新于2025-06-07 12:57:30,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    思路:

    由于最终只有一盏灯是开的,这意味着这盏灯被按了奇数次,而其他所有灯都被按了偶数次。

    这里可以利用异或运算的特性:

    • 任何数与 00 异或结果是它本身。
    • 任何数与自身异或结果是 00

    因此,我们可以将每次操作涉及的灯的编号进行异或运算,最终得到的结果就是唯一开着的灯的编号。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    long long n,t,ans,x;
    double a;
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++){
        	cin>>a>>t;
            for(int i=1;i<=t;i++){
    			x=(int)floor(a*i);//a*i为当前灯的编号
    			ans^=x;
    		}
    	}
    	cout<<ans;
    	return 0;
    }
    
    • 1

    信息

    ID
    163
    时间
    1000ms
    内存
    125MiB
    难度
    1
    标签
    递交数
    1
    已通过
    1
    上传者