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

116 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

题面

警惕国奖爷打牌

警惕国奖爷打牌

2000ms 1MB

Description

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

Input Description

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

第二行RLR-L个整数aia_i,分别代表国奖爷手上剩余牌的编号。

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

Output Description

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

Input Sample

1 5
4 2 1 5

Output Sample

3

Hint

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

题解

由于内存放不下所有的数,可以考虑换一种方案,即求LLRR的和,再逐个减去输入数据,这样只要存两个变量,求和、输入。同时考虑到输入数据109<ai<109-10^9<{a_i}<10^9,会爆int(32位整形,储存范围在[231-2^{31},23112^{31}-1])所以可以考虑开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;
}