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

Code

#include <iostream>

using namespace std;

const int tab64[64] = {
    63,  0, 58,  1, 59, 47, 53,  2,
    60, 39, 48, 27, 54, 33, 42,  3,
    61, 51, 37, 40, 49, 18, 28, 20,
    55, 30, 34, 11, 43, 14, 22,  4,
    62, 57, 46, 52, 38, 26, 32, 41,
    50, 36, 17, 19, 29, 10, 13, 21,
    56, 45, 25, 31, 35, 16,  9, 12,
    44, 24, 15,  8, 23,  7,  6,  5};

int log2_64 (uint64_t value)
{
    value |= value >> 1;
    value |= value >> 2;
    value |= value >> 4;
    value |= value >> 8;
    value |= value >> 16;
    value |= value >> 32;
    return tab64[((uint64_t)((value - (value >> 1))*0x07EDD5E59A4E28C2)) >> 58];
}

long long solve(long long k) {
	if (k <= 1) return k;
	//cout << "solve(" << k << ") = !solve(" << k << "-(1<<" << log2_64(k) << ")) = !solve(" << k << "-" << ((long long)1<<log2_64(k)) << ")" << endl;
	return !solve(k-((long long)1<<log2_64(k)));
}

int main() {
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		long long k;
		cin >> k;
		cout << solve(k-1) << endl;
	}
}

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