[呱一题] 警惕国奖爷打牌

这篇博客介绍了一个关于数字处理的问题,国奖爷的牌局。题目要求通过数学运算找出被拿走的牌,由于内存限制不能存储所有数据。博主提出了使用异或运算来解决这个问题,通过计算一定范围内的数字和,然后逐个减去剩余牌的编号,最终得到被拿走的牌的编号。代码示例中展示了如何使用这种方法,强调了使用long long类型或位运算的效率,并提示避免使用cin以提高读入速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题面

警惕国奖爷打牌

警惕国奖爷打牌

2000ms 1MB

Description

众所周知,国奖爷非常爱打牌,现在国奖爷手上有编号从 L L L R R R的若干张牌,为防止国奖爷打牌,正义的鸽谭英雄比特侠(BitMan)出手,打乱了国奖爷的牌,并从中取走一张。现在,被国奖爷收买的你,要帮国奖爷判断,被拿走的是哪一张牌。

Input Description

第一行两个整数 L , R L, R L,R

第二行 R − L R-L RL个整数 a i a_i ai,分别代表国奖爷手上剩余牌的编号。

对于所有的数据 L , R L, R L,R, − 1 0 9 < L < R < 1 0 9 -10^9<L<R<10^9 109<L<R<109, − 1 0 9 < a i < 1 0 9 -10^9<a_i<10^9 109<ai<109, R − L < 1 0 7 R-L<10^7 RL<107

Output Description

输出一行一个整数,表示国奖爷丢失的那张牌的编号。

Input Sample

1 5
4 2 1 5

Output Sample

3

Hint

内存限制放不下所有的输入。

题解

由于内存放不下所有的数,可以考虑换一种方案,即求 L L L R R R的和,再逐个减去输入数据,这样只要存两个变量,求和、输入。同时考虑到输入数据 − 1 0 9 < a i < 1 0 9 -10^9<{a_i}<10^9 109<ai<109,会爆int(32位整形,储存范围在[ − 2 31 -2^{31} 231, 2 31 − 1 2^{31}-1 2311])所以可以考虑开long long(64位整形),或者直接用位运算求异或和(XOR)代替。注意不要使用cin,慢,可以用scanf函数,有能力的可以写快速读入。

代码

// by Concyclics
//
//
#include <cstdio>

int main()
{
    int L,R,ans,ai;
    scanf("%d %d",&L,&R);
    
    ans=R;
    for(int i=L;i<R;i++)
    {
        scanf("%d",&ai);
        ans^=i;
        ans^=ai;
    }
    printf("%d",ans);
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

concyclics

可怜可怜孩子吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值