昨晚ABC的E题求条
  • 板块学术版
  • 楼主WA_csp_noip
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/12/29 16:02
  • 上次更新2024/12/29 20:12:07
查看原帖
昨晚ABC的E题求条
1559398
WA_csp_noip楼主2024/12/29 16:02
#include <stdio.h>
#include <algorithm>
#define ll long long
using namespace std;

const int N = 2e5 + 5;
int n, k, a[N];
ll b[N], ans;

inline void dfs(int i, int t, ll sum) {
	if (t > k || n - i + 1 + t < k)	//选不到 k 个了 
		return;
	if (t == k) {
		ans = max(ans, sum);
		return;
	}
	if (n - i + 1 == k - t) {
		ans = max(ans, sum ^ b[i]);
		return;
	}
	if (i == n + 1)
		return;
	dfs(i + 1, t, sum);
	dfs(i + 1, t + 1, sum ^ a[i]);
}

int main() {
	scanf("%d%d", &n, &k);
	for (int i = 1; i <= n; i++)
		scanf("%d", &a[i]);
	b[n] = a[n];
	for (int i = n - 1; i; i--)
		b[i] = b[i + 1] ^ a[i];
	dfs(1, 0, 0);
	printf("%lld", ans);
}

WA * 45

球球各位dalao帮我看一下

2024/12/29 16:02
加载中...