题目:


解题思路:
第一问直接全部或在一起就是解
第二问数越少越好,维护一个宽度为k得窗口就ok了
Accepted code:
#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 1000010
using namespace std;
int a_o, a_a, a[N], v[35], maxn, n, k;
inline void read(int &f) {
f = 0; char c = getchar();
while (!isdigit(c)) c = getchar();
while (isdigit(c)) f = (f<<1) + (f<<3) + c - 48, c = getchar();
return;
}
int main() {
read(n); read(k);
for (int i = 1; i <= n; i++) {
read(a[i]);
a_o |= a[i];
for (int j = 0; j < 32; j++)
v[j] += (a[i]>>j) & 1;
if(i >= k) {
for (int j = 0; j < 32; j++)
v[j] -= (a[i-k]>>j) & 1;
int a_a = 0;
for (int j = 0; j < 32; j++)
a_a += (v[j] == k) * (1<<j);
maxn = max(maxn, a_a);
}
}
printf("%d %d", a_o, maxn);
}


402

被折叠的 条评论
为什么被折叠?



