打卡信奥刷题(3469)用C++实现信奥题 P10558 [ICPC 2024 Xi‘an I] XOR Game

P10558 [ICPC 2024 Xi’an I] XOR Game

题目描述

Alice 和 Bob 正在进行一场游戏。

在他们面前有一个多重集 {ai}\{a_i\}{ai},其中包含非负整数,还有一个整数 xxx。在游戏开始前,aaa 中的每个数字都是 0002i(0≤i<k)2^i(0\le i<k)2i(0i<k)

这是一场回合制游戏,Alice 先开始。在一个人的回合中,他或她将从 aaa 中选择一个整数。设这个数为 ppp。然后这个人可以选择是否执行 x←x⊕px\gets x\oplus pxxp,接着从 aaa 中移除 ppp。这里,操作 ⊕\oplus 表示按位异或。

Alice 想让 xxx 尽可能大,而 Bob 想让 xxx 尽可能小。

你是一个旁观者,想知道最终的 xxx 值。然而,aaa 的大小是一个巨大的数字。形式上,对于所有 0≤i<k0\le i<k0i<k,有 bib_ibi 个数在 aaa 中的值为 2i2^i2i,并且有 zzz 个数的值为 000。但你仍然想挑战这个不可能的问题。

如果 Alice 和 Bob 足够聪明,请输出最终的 xxx 值。

输入格式

第一行包含两个整数 k,z(1≤k≤105,0≤z≤109)k,z(1\le k\le10^5,0\le z\le 10^9)k,z(1k105,0z109)

下一行包含 kkk 个整数,第 iii 个整数是 bi−1(0≤bi−1≤109)b_{i-1}(0\le b_{i-1}\le10^9)bi1(0bi1109)

输出格式

以二进制格式输出答案。注意,即使这个数字有前导 000,你也应该从高位到低位输出恰好 kkk 位。

输入输出样例 #1

输入 #1

1 0
3

输出 #1

1

输入输出样例 #2

输入 #2

2 0
2 1

输出 #2

11

输入输出样例 #3

输入 #3

2 0
2 2

输出 #3

00

说明/提示

(由 ChatGPT 4o 翻译)

C++实现

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int k,z,f,use;
int b[N];
int main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin>>k>>z;
	f=z&1;
	for(int i=1;i<=k;i++){
		cin>>b[i];
		if(b[i]&1) f^=1;
	}
	if(f){
		for(int i=k;i>0;i--){
			if(b[i]==0) cout<<0;
			else if(b[i]==1){
				use^=1;
				cout<<use;
			}
			else cout<<1;
		}
	}
	else{
		for(int i=k;i>0;i--){
			if(b[i]==1){
				use^=1;
				cout<<use;
			}
			else cout<<0;
		}
	}
	return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值