CF869A The Artful Expedient 结论题+数论

传送门

题目描述
Tommy和Karen在玩一个游戏。
他们各自准备了一个长度为n的数组,Tommy的数组称作a,Karen的数组称作b。
保证这2n个数互不相同,设这2n个数构成的集合为S。
现在他们想知道,有多少对(i,j)满足a[i] xor b[j]的结果在集合S中。
当这个数为奇数的时候,Tommy获胜,否则Karen获胜。
现在给你n和这两个数组,你需要告诉他们是谁赢了。
输入
第一行一个整数T,表示数据组数。
每组数据内,第一行一个正整数n。
每组数据内,第二行n个正整数,表示数组a。
每组数据内,第三行n个正整数,表示数组b。
输出
输出T行,每行一个字符串Tommy或者Karen,表示谁胜利了。

唉,就是道结论题,害我想了一个小时
a , b a,b a,b里的数都大于1时,若存在 a [ i ]   x o r   b [ j ] ∈ S a[i]\ xor\ b[j] \in S a[i] xor b[j]S

  • a [ i ]   x o r   b [ j ] = = a [ k ] a[i]\ xor\ b[j] == a[k] a[i] xor b[j]==a[k]时,有 a [ k ]   x o r   b [ j ] = = a [ i ] a[k]\ xor\ b[j] == a[i] a[k] xor b[j]==a[i]
  • a [ i ]   x o r   b [ j ] = = b [ k ] a[i]\ xor\ b[j] == b[k] a[i] xor b[j]==b[k]时,有 a [ i ]   x o r   b [ k ] = = b [ j ] a[i]\ xor\ b[k] == b[j] a[i] xor b[k]==b[j]

所以答案只能是偶数,即Karen获胜。
怪不得看几个样例全是Karen胜。。。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN = 200001;

int Ans;
int a[MAXN], b[MAXN];

inline int read(){
    int k = 0, f = 1; char ch = getchar();
    while(ch < '0' || ch > '9'){if(ch == '-') f = -1; ch = getchar();}
    while(ch >= '0' && ch <= '9'){k = k*10 + ch - '0'; ch = getchar();}
    return k * f;
}

int main(){
    int n = read(), Ans = 0;
    for(int i = 1; i <= n; i++){
        a[i] = read();
    }
    for(int i = 1; i <= n; i++){
        b[i] = read();
    }
    puts("Karen");
    return 0;
}

总结:要勤于打表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值