社区讨论

D求调

学术版参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mju8hv0p
此快照首次捕获于
2026/01/01 00:32
2 个月前
此快照最后确认于
2026/01/03 15:40
2 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define pii pair<int,int>
#define pli pair<ll,int>
#define pil pair<int,ll>
#define pll pair<ll,ll>
#define fi first
#define se second
#define gtc getchar
#define ptc putchar
using namespace std;
const int N=2e5+5;
int t;
int n,m;
int a[N];
int ans;
bool vis[N];
bool check(int p){
	int cnt=0;
	for(int i=1;i<=n;i++){
		cnt+=!!((1<<p)&a[i]);
	}
	if(!(cnt>=m&&(cnt-m)%2==0)) return 0;
	int v[32];
	for(int i=0;i<=30;i++) v[i]=0;
	cnt=0;
	for(int j=1;j<=n;j++){
		for(int i=p;i<=30;i++){
			if((1<<i)&a[j]){
				++v[i];
			}
		}
		bool f=0;
		for(int i=p;i<=30;i++){
			if((vis[i]||i==p)&&v[i]%2==0){
				f=1;
				break;
			}
		}
		if(f==0){
			++cnt;
			for(int i=p;i<=30;i++){
				v[i]=0;
			}
		}
	}
	if(cnt<m) return 0;
	return 1;
}
int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d%d",&n,&m);
		ans=0;
		for(int i=1;i<=n;i++){
			scanf("%d",a+i);
		}
		for(int i=30;i>=0;i--){
			if(check(i)){
				vis[i]=1;
				ans+=(1<<i);
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}
20pts

回复

3 条回复,欢迎继续交流。

正在加载回复...