| Task: | Bittijono |
| Sender: | JesseNiininen |
| Submission time: | 2016-10-05 19:32:59 +0300 |
| Language: | Java |
| Status: | READY |
| Result: | 29 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 10 |
| #2 | ACCEPTED | 19 |
| #3 | TIME LIMIT EXCEEDED | 0 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.17 s | 1 | details |
| #2 | ACCEPTED | 1.56 s | 2 | details |
| #3 | TIME LIMIT EXCEEDED | -- | 3 | details |
Code
import java.math.BigInteger;
import java.util.Scanner;
public class Bittijono {
private static BigInteger[] powerOf2 = new BigInteger[61];
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = Integer.parseInt(scanner.nextLine());
powerOf2[0] = BigInteger.valueOf(1);
powerOf2[1] = BigInteger.valueOf(2);
for (int i = 2; i < powerOf2.length; i++) {
powerOf2[i] = powerOf2[i - 1].multiply(powerOf2[1]);
}
while (n-- > 0) {
BigInteger k = new BigInteger(scanner.nextLine());
int power = upperPowerOf2(k);
BigInteger maxIndex = powerOf2[power];
boolean guess = true;
while (!k.equals(BigInteger.ONE)) {
BigInteger halfMaxIndex = maxIndex.divide(powerOf2[1]);
if (k.compareTo(halfMaxIndex) > 0) {
guess = !guess;
k = k.subtract(maxIndex.divide(powerOf2[1]));
}
maxIndex = halfMaxIndex;
}
if (guess) {
System.out.println(0);
} else {
System.out.println(1);
}
}
}
private static int upperPowerOf2(BigInteger num) {
int low = 0;
int high = powerOf2.length - 1;
while (true) {
int middle = (low + high) / 2;
if (powerOf2[low].compareTo(num) >= 0) {
return low;
}
if (powerOf2[middle].compareTo(num) == 0) {
return middle;
}
if (powerOf2[middle].compareTo(num) < 0) {
if (middle + 1 <= high && powerOf2[middle + 1].compareTo(num) >= 0) {
return middle + 1;
} else {
low = middle + 1;
}
} else if (middle - 1 >= low && powerOf2[middle - 1].compareTo(num) < 0) {
return middle;
} else {
high = middle - 1;
}
}
}
}
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: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 374768524402011755 937067109466254318 389256426086302899 932585725667010169 ... |
| correct output |
|---|
| 0 1 1 1 1 ... |
| user output |
|---|
| (empty) |
