Task: | Bittijono |
Sender: | JesseNiininen |
Submission time: | 2016-10-05 19:43:00 +0300 |
Language: | Java |
Status: | READY |
Result: | 0 |
group | verdict | score |
---|---|---|
#1 | WRONG ANSWER | 0 |
#2 | WRONG ANSWER | 0 |
#3 | TIME LIMIT EXCEEDED | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | WRONG ANSWER | 0.17 s | 1 | details |
#2 | WRONG ANSWER | 1.98 s | 2 | details |
#3 | TIME LIMIT EXCEEDED | -- | 3 | details |
Code
import java.math.BigInteger;import java.util.HashMap;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]);}HashMap<BigInteger, Boolean> answers = new HashMap<>();while (n-- > 0) {BigInteger k = new BigInteger(scanner.nextLine());BigInteger originalK = k;int power = upperPowerOf2(k);BigInteger maxIndex = powerOf2[power];boolean guess = true;while (!k.equals(BigInteger.ONE)) {Boolean answer = answers.get(k);if(answer != null){guess = !answer;}BigInteger halfMaxIndex = maxIndex.divide(powerOf2[1]);if (k.compareTo(halfMaxIndex) > 0) {guess = !guess;k = k.subtract(maxIndex.divide(powerOf2[1]));}maxIndex = halfMaxIndex;}if (guess) {answers.put(originalK, false);System.out.println(0);} else {answers.put(originalK, true);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: WRONG ANSWER
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: WRONG ANSWER
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) |