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

题面

警惕国奖爷打牌

警惕国奖爷打牌

2000ms 1MB

Description

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

Input Description

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

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

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

Output Description

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

Input Sample

1 5
4 2 1 5

Output Sample

3

Hint

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

题解

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


版权声明:本文为qq_21008741原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。