CSES - BAPC 2017 - Results
Submission details
Task:Collatz Conjecture
Sender:Antti Röyskö
Submission time:2017-10-24 20:30:35 +0300
Language:C++
Status:READY
Result:
Test results
testverdicttime
#1--details
#2--details
#3--details
#4--details
#5ACCEPTED0.06 sdetails
#6ACCEPTED0.04 sdetails
#7ACCEPTED2.18 sdetails
#8ACCEPTED0.95 sdetails
#9--details
#10--details
#11--details
#12ACCEPTED2.02 sdetails
#13ACCEPTED1.88 sdetails
#14--details
#15ACCEPTED2.65 sdetails
#16ACCEPTED0.99 sdetails
#17ACCEPTED0.64 sdetails
#18--details
#19ACCEPTED2.39 sdetails
#20ACCEPTED1.89 sdetails
#21ACCEPTED2.08 sdetails
#22--details
#23--details
#24--details
#25--details
#26--details

Code

#include <iostream>
#include <vector>
#include <algorithm>

const int N = 5 * (1e5);
const int P = 21;
long long jump[P][N];

long long gcd(long long a, long long b) {
	int twos = 0;
	while(((a | b) & 1) == 0) {
		a >>= 1;
		b >>= 1;
		++twos;
	}
	while(a != b) {
		if (a < b) std::swap(a, b);
		if (a & b & 1) {
			a -= b;
		} else if (a & 1) {
			b >>= 1;
		} else {
			a >>= 1;
		}
	}
	return a << twos;
}

int main() {
	int n;
	std::cin >> n;
	for (int i = 0; i < n; ++i) {
		std::cin >> jump[0][i];
	}
	for (int p = 1; p < P; ++p) {
		for (int i = 0; i < n; ++i) {
			int next = std::min(n-1, i + (1<<(p-1)));
			jump[p][i] = gcd(jump[p-1][i], jump[p-1][next]);
		}
	}
	std::vector<long long> res;
	for (int s = 0; s < n; ++s) {
		long long val = jump[0][s];
		int i = s;
		// loop the times it decreases
		while(i < n) {
			val = gcd(val, jump[0][i]);
			// loop the binary search
			int j = P-1;
			while(i < n) {
				// loop the jump
				for (; j >= 1; --j) {
					if (gcd(val, jump[j][i]) == val) {
						break;
					}
				}
				if (j == 0) {
					i = i + 1;
					break;
				} else {
					i += (1<<j) - 1;
				}
			}
			res.push_back(val);
		}
	}
	std::sort(res.begin(), res.end());
	res.erase(std::unique(res.begin(), res.end()), res.end());
	std::cout << res.size() << '\n';
}











Test details

Test 1

Verdict:

input
500000
576460752303423488 28823037615...

correct output
8627

user output
(empty)

Test 2

Verdict:

input
500000
450283905890997363 15009463529...

correct output
238576

user output
(empty)

Test 3

Verdict:

input
500000
576460752303423488 28823037615...

correct output
99106

user output
(empty)

Test 4

Verdict:

input
500000
701982420492091392 23399414016...

correct output
759

user output
(empty)

Test 5

Verdict: ACCEPTED

input
5
999999937 999999866000004473 9...

correct output
4

user output
4

Test 6

Verdict: ACCEPTED

input
4
100000000000000003 10000000000...

correct output
3

user output
3

Test 7

Verdict: ACCEPTED

input
500000
2 114 30 210 2310 30030 30030 ...

correct output
130

user output
130

Test 8

Verdict: ACCEPTED

input
400000
4 6 10 14 22 26 34 38 46 58 62...

correct output
160

user output
160

Test 9

Verdict:

input
500000
2 430677 5 2 3 5 2 3 5 2 3 5 2...

correct output
1368

user output
(empty)

Test 10

Verdict:

input
450000
2 8052 5 2 3 5 15778 3 5 2 3 5...

correct output
822

user output
(empty)

Test 11

Verdict:

input
500000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
1582

user output
(empty)

Test 12

Verdict: ACCEPTED

input
500000
4 6 10 14 22 26 34 38 46 58 62...

correct output
181

user output
181

Test 13

Verdict: ACCEPTED

input
300000
4 6 10 14 22 26 34 38 46 58 62...

correct output
174

user output
174

Test 14

Verdict:

input
500000
4 6 10 14 22 26 34 38 46 58 62...

correct output
188

user output
(empty)

Test 15

Verdict: ACCEPTED

input
500000
259695496911122585 42019614072...

correct output
4

user output
4

Test 16

Verdict: ACCEPTED

input
500000
1 2 4 8 16 32 64 128 256 512 1...

correct output
60

user output
60

Test 17

Verdict: ACCEPTED

input
100000
59299434989690526 421945966867...

correct output
100444

user output
100444

Test 18

Verdict:

input
500000
11245340592095052 677443682130...

correct output
500999

user output
(empty)

Test 19

Verdict: ACCEPTED

input
100000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
287

user output
287

Test 20

Verdict: ACCEPTED

input
100000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
330

user output
330

Test 21

Verdict: ACCEPTED

input
100000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
287

user output
287

Test 22

Verdict:

input
500000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
339

user output
(empty)

Test 23

Verdict:

input
500000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
372

user output
(empty)

Test 24

Verdict:

input
500000
524288 262144 131072 65536 327...

correct output
60

user output
(empty)

Test 25

Verdict:

input
100000
307444891294245705 20496326086...

correct output
211

user output
(empty)

Test 26

Verdict:

input
500000
307444891294245705 20496326086...

correct output
211

user output
(empty)