#785(Div.2) E
作者:
昊子
,
2022-05-06 21:34:08
,
所有人可见
,
阅读 193
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define int long long
#define endl '\n'
const int M = 1ll << 20;
char ans[M];
int b[M + 10];
void solve(){
int n, k;
cin >> n >> k;
for(int i = 0; i < n; ++ i)cin >> b[i];
for(int l = 0; l < n; ++ l){
int lens = 1;
for(int r = l; r < n; ++ r){
if(l == r)lens *= b[l];
else{
if(b[r] >= 20)break;
else lens *= (1ll << b[r]);
}
if(lens >= M)break;
int m = n - 1 - r + l - 2;
int q = k - 2;
if(l == 0){
m ++;
q ++;
}
if(r == n - 1){
m ++;
q ++;
}
if(m >= q && (m == 0 || q > 0 && ((m - 1) | (q - 1) == (m - 1)))){
ans[lens] = '1' + '0' - ans[lens];
}
}
}
bool fl = false;
for(int i = M - 1; i >= 0; -- i){
if(ans[i] == '0' && fl)cout << 0;
else if(ans[i] == '1'){
cout << 1;
fl = true;
}
}
if(fl)cout << endl;
else cout << 0 << endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
for(int i = 0; i < M; ++ i)ans[i] = '0';
solve();
return 0;
}