记人生第一次参加Codeforces Global Round

Codeforces Global Round 21.

Saturday, June 25, 2022 at 22:35UTC+8

gyh20是巴蜀的OIer,也是此次的两位出题人之一,出了1/8。

  1. NIT,切肉刀,在城里是新的!成千上万的人排队抢他。为了让他的 orzer 玩得开心,NIT 决定让他们解决以下与 orz 相关的问题。你也能解决这个问题吗? 给定一个由 n 个整数、a 和一个整数 z 组成的 1 索引数组。您可以任意次数(可能为零)执行以下操作: 选择一个正整数 i,使得 1≤i≤n。然后,同时将 ai 设置为 (aiorz) 并将 z 设置为 (aiandz)。换句话说,设 x 和 y 分别是 ai 和 z 的当前值。然后将 ai 设置为 (xory) 并将 z 设置为 (xandy)。 这里 or 和 and 分别表示按位运算 OR 和 AND。 在任意次数(可能为零)的操作之后找到最大值的最大可能值。 输入 每个测试包含多个测试用例。第一行包含测试用例的数量 t (1≤t≤100)。测试用例的描述如下。 每个测试用例的第一行包含两个整数 n 和 z (1≤n≤2000, 0≤z<230)。 每个测试用例的第二行包含 n 个整数 a1,a2,…,an (0≤ai<230)。 保证所有测试用例的 n 总和不超过 104。 输出 对于每个测试用例,打印一个整数——问题的答案。

这道题的实质是求max(ai or z)。and操作只会让z越来越小,而z越大,对于ai去or起来是越有利的。所以你一开始先去和那些小的(ai or z)进行操作,最后无论如何都不会有特别大的(ai or z),因为你那些小的他们大不起来,然后z的值又被浪费了。所以就直接求max(ai or z)就行了。

#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
using namespace std;
int t,n;
long long z,a[2010];
void solve(){
	long long ans=-1;
	for(int i=1;i<=n;i++)ans=max(ans,a[i]|z);
	cout<<ans<<endl;
}
int main(){
	cin>>t;
	for(int i=1;i<=t;i++){
		cin>>n>>z;
		memset(a,0,sizeof(a));
		for(int j=1;j<=n;j++)cin>>a[j];
		solve();
	}
	return 0;
}

这次圆满地爆零了,人生第一次掉rating。

不过如果没有大佬们的帮助,我也不会第二天一大早起来就AC第一题。还是非常感谢有这么几个好朋友。

至于比赛时情况如何嘛。。。我前两个小时都去颓废了,根本什么都想不到。我一个人打,也没有什么动力。但是后来我发了一个说说,被一个人很好的网友看见了,来问我第一题过了没。我说没有,然后就一直截图给他看代码,一直按他说的修改(我就是个废物没错了)我感觉最后那十分钟激情澎湃。最后实在没办法样例过不了,他发来了他python的码让我先交着,我真的至今记得当时还有4秒钟,然后提交的网页还没加载出来就contest over了,之后就点不起了。。。

第二天起来把我的码发给一个巨佬debug,他一眼就看出来是cin错了,cin>>a[j]打成a[i]了

总之,打cf还是很有意思的。后来跟他闲聊时问他,rating高了之后是不是每次打都怕掉,他说是,就像赌博一样。

其实,比赌博好玩多了。特别是,有些人的陪伴,打cf是一件很幸福的事。

p.s.最近要期末了事情有点多。现在已经一个星期过去了,把这点博客补完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值