 # Help On AND Rounds problem

I thought my algorithm is correct but it is giving wrong answer. To solve the problem i have tried to scan for every bit of integers. Say, the maximum integer has bits Cbit. For each bit j = Cbit to 0, I checked for every integer Ai whither there is an integer x which has j-th bit 0 and whither index of x has distance <= K from Ai. If so, then i have set the j-th bit of Ai to zero. This algorithm has running time O(N* bit). It is passing all the test case i have tried. But somehow it is giving wrong answer on CodeChef’s Judge. Why the algorithm is not working ?

My algo

``````int CountBit(int n)
{
unsigned int c; // c accumulates the total bits set in v

for (c = 0; n; c++)
n = n >>1; // clear the least significant bit set
return c;
}

int main()
{
int test,i,j, sum;
int *A;
int N, K;
int max;
int cBIT;

scanf("%d",&test);

while(test--)
{
N = read_int();
K = read_int();
max = -1;
A = new int[N+2];
FOR(i,1,N)
{
A[i] = read_Int();
if(A[i] > max) max = A[i];
}
A = A[N];
A[N+1] = A;
cBIT = CountBit(max);
//   cout<<cBIT<<endl;

//  int *lastPos0 = new int[N+2];

//   FOR(i,1,N)
// lastPos0[i] = N+2;
int lstZeroBit = -1;
int bit;
while(cBIT>=1)
{
lstZeroBit = -1;
FOR(i,0,N)
{
int bit = (A[i] & ( 1 << (cBIT-1))) >> (cBIT-1);

if( lstZeroBit!= -1 && (i - lstZeroBit) <= K)
{
A[i] &= ~(1u << (cBIT - 1) ) ;
}

if(bit==0)
{
lstZeroBit = i;
}
}

lstZeroBit = -1;

for(i=N+1;i>0;i--)
{
int bit = (A[i] & ( 1 << (cBIT-1))) >> (cBIT-1);

if(lstZeroBit != -1 && (lstZeroBit - i) <= K)
{
A[i] &= ~(1u << (cBIT -1)) ;
}

if(bit==0)
{
lstZeroBit = i;
}

}
cBIT--;
}
printf("%d",A);
FOR(i,2,N)printf(" %d",A[i]);
printf("\n");
}

}``````

Try this one:

``````1
7 2
15 15 15 15 15 5 15
`````` 