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
...