- Can anyone please provide a simple testcase on which this code fails. I am not able to find such a case.
Code
void solve()
{
int n , m , k ; cin >> n >> m >> k;
vector<int>a(n) , b(m); input(a); input(b);
int res = 0;
for(auto x : a) res += x;
vector<vector<int>>prefsum(n , vector<int>(m+1 , 0));
for(int i = 0 ; i < n ; i++){
int num = a[i];
prefsum[i][0] = 0;
for(int l = 1 ; l <= m ; l++){
int ch = 0;
for(auto x : b){
ch = max(ch , num - (num & x));
}
num -= ch;
prefsum[i][l] = ch;
}
}
set<array<int , 3>> st;
for(int i = 0 ; i < n ; i++){
st.insert({prefsum[i][1] , i , 1});
}
int ops = 0;
vector<int>store;
while(ops < k ){
array<int , 3> p = *st.rbegin();
st.erase(p);
store.push_back(p[0]);
ops++;
if(p[2] < m) st.insert({prefsum[p[1]][p[2]+1] , p[1] , p[2]+1});
}
int sum = accumulate(all(store) , 0ll);
debug(store);
cout << res - sum << endl;
}