This code is repetitively giving WA for L56GAME. Can anyone find a mistake here? Or am i missing some corner cases?

Link to the problem L56GAME

#include <bits/stdc++.h>
#include

using namespace std;

int main()
{

ios::sync_with_stdio(0); cin.tie(0);

int t;

cin>>t;

while(t–){

int n;

cin>>n;

int odd=0,even=0;

    while(n--){

        int a;

        cin>>a;

        if(a%2==0) even++;

        else odd++;

    }

    if(odd%2==0) cout<<"1"<<"\n";

    else if(odd==n || even ==n) cout<<"1"<<"\n";

    else cout<<"2"<<"\n";

}



return 0;

}

Do below steps

  1. “else if” is useless as n will always be -1 (you are decreasing n-- in while loop)
  2. replace while by for loop
  3. remove “else if” and modify “if” like : if(odd%2==0 || n == 1)

Here is my solution : CodeChef: Practical coding for everyone
It is same as yours after fixing above issues.

Yes you are missing in the logic part as well as coding part…

Consider n=3 and elements be { 1, 3 ,5} then

Your logic will give output 1 while…

taking
1+3=4
array becomes
{4 , 5 }
which can’t be reduced to anything and
#hence Output should have been 2

#when

odd%2==1 and (even>0 or odd>=3)

#then and only then output will be 2… otherwise output is 1…

avoid using while(n–) type code when you need to use value of n inside or after the while loop

Because while(n–) will erase the value of n…

#HERE is the accepted solution of what I explained to you in case you need reference…

#why the condition should be like this ??
Well take different cases and figure out the answer… understanding this is kept as homework for you… Do let me know if u still need explanation or u have any doubt on this…

Thanks. Got AC.

Thanks for the explanation. Got AC.

welcome :slight_smile: