CSES - Datatähti 2017 alku - Results
Submission details
Task:Bittijono
Sender:mangolassi
Submission time:2016-10-03 18:41:30 +0300
Language:C++
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED10
#2ACCEPTED19
#3ACCEPTED71
Test results
testverdicttimegroup
#1ACCEPTED0.05 s1details
#2ACCEPTED0.07 s2details
#3ACCEPTED0.14 s3details

Code

#include <iostream>
int main() {
/*
bit in index i in second half is negation of bit in index i on first half
index of first: i
index of second: i + 2^n, where 2^n <= i < 2^n+1
So result is sum of bits in i, % 2
*/
int q;
std::cin >> q;
bool* res = new bool[q]; // false 0, true 1
for (int i = 0; i < q; ++i) {
long long bit;
std::cin >> bit;
--bit; // Why are the bits numbered from 1, instaed of from 0???
// Calculate sum of bits
bool sum = false; // whether sum is odd
while (bit != 0) {
sum = !sum;
bit &= bit - 1;
// bitwise and. Since bit is 2^a1 + 2^(a2) + ... + 2^(an), where a1>a2>...>an>=0,
// bit - 1 is 2^a1 + 2^(a2) + ... + 2^a(n-1) + (2^(an) - 1)
// = 2^a1 + 2^(a2) + ... + 2^a(n-1) + 2^an-1 + 2^an-2 + ... + 2^0
// bitwise and will remove one bit
}
res[i] = sum;
}
for (int i = 0; i < q; ++i) {
std::cout << (res[i] ? "1\n" : "0\n");
}
}

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
100
62
9
12
73
...

correct output
1
1
1
0
1
...

user output
1
1
1
0
1
...

Test 2

Group: 2

Verdict: ACCEPTED

input
100000
565433
141881
120108
825392
...

correct output
1
1
0
0
1
...

user output
1
1
0
0
1
...

Test 3

Group: 3

Verdict: ACCEPTED

input
100000
374768524402011755
937067109466254318
389256426086302899
932585725667010169
...

correct output
0
1
1
1
1
...

user output
0
1
1
1
1
...