My issue
Below appears to be a valid solution. But When I check it manually it doesn’t look valid.
CodeChef aproves it as a good one but look:
Lets check sums of series for given N:
N=1 Sum=1 ->Odd
N=2 Sum=3 ->Odd
N=3 Sum=6 ->Even
N=4 Sum=10 ->Even
N=5 Sum=15 >Odd
N=6 Sum=21 >Odd
N=7 Sum=28 ->Even
N=8 Sum=36 ->Even
So this code should not pass, because it gives below output for this case:
N:1 lenth:0 Sum:0
N:2 lenth:1 Sum:1
N:3 lenth:3 Sum:6
N:4 lenth:4 Sum:10
N:5 lenth:4 Sum:10
N:6 lenth:5 Sum:15
N:7 lenth:7 Sum:28
N:8 lenth:8 Sum:36
So for n=2 it should be 0, and for n=6 solution is 4 not 5, because sum series for N=5 equals 15 so it is odd.
My code
#include <iostream>
using namespace std;
int main() {
// your code goes here
int t,n,temp;
cin>>t;
while(t--)
{
cin>>n;
temp = n*(n + 1) / 2;
if(temp % 2 !=0)
cout<<n - 1<<endl;
else
cout<<n<<endl;
}
return 0;
}
Problem Link: CodeChef: Practical coding for everyone
@camillowski
For n=2
its sum is 1+2 =3
which is odd.
but when i’ll remove starting 1 it gives me 2 only which is even .
That’s how its possible and it will work for all other cases too where u got (n*(n+1))/2 as odd sum.
OK, but the problem statement says “…Consider the sequence containing the integers 1,2,…,N 1,2,…,N in increasing”
So it is not from 2 but from 1.
Moreover example one also takes all three numbers into consideration:
“Example case 1:** The optimal choice is to choose the entire sequence, since the sum of all its
elements is 1+2+3=61+2+3=6, which is even.”
Applying your way of thinking in the example we should also take only 2 and 3 which would give us 5 which is odd, so example would not pass.
@camillowski
actually the question says u have to find the maximum length of the subarray that result in even sum .
The subarray the said to be the part of the array that can be made by erasing some integers from the back or from the front .
Now if u have cleared the definition of subarray lets take some ex:-
for n=2
maximum length wound be 2 but its sum is 1+2 =3(which is odd) so i pick a subarray of length 1 from [1 ,2] which is 2 itself and its sum is even.
now for n=3
its maximum length for which the sum is even is 3 itself.
so if u got the intuition by now u will get it that if the sum of all numbers till n which will be (n*(n+1))/2; is even then answer will be n itself and if its odd then we can drop the 1 from it and pick rest elements which will be a subarray of length n-1 .
I hope u will get it now . Let me know in case u have more doubts.
1 Like
Yes, now I understand your point of view. I see that my mistake was an assumption that the sequence MUST start from 1. I got misled by word “contiguous”. Also examples they gave were a bit tricky.
Thank you dpcoder_007 for you time spent explaining me the solution. I’m very grateful for that and I wish you a good evening.
1 Like