| Task: | Taulukko | 
| Sender: | DevBonBon | 
| Submission time: | 2018-10-09 02:57:52 +0300 | 
| Language: | Java | 
| Status: | READY | 
| Result: | 0 | 
| group | verdict | score | 
|---|---|---|
| #1 | WRONG ANSWER | 0 | 
| #2 | TIME LIMIT EXCEEDED | 0 | 
| #3 | TIME LIMIT EXCEEDED | 0 | 
| #4 | TIME LIMIT EXCEEDED | 0 | 
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | WRONG ANSWER | 0.26 s | 1 | details | 
| #2 | WRONG ANSWER | 0.22 s | 1 | details | 
| #3 | WRONG ANSWER | 0.22 s | 1 | details | 
| #4 | WRONG ANSWER | 0.27 s | 1 | details | 
| #5 | WRONG ANSWER | 0.25 s | 1 | details | 
| #6 | WRONG ANSWER | 0.23 s | 1 | details | 
| #7 | WRONG ANSWER | 0.23 s | 1 | details | 
| #8 | WRONG ANSWER | 0.26 s | 1 | details | 
| #9 | WRONG ANSWER | 0.26 s | 1 | details | 
| #10 | WRONG ANSWER | 0.24 s | 1 | details | 
| #11 | WRONG ANSWER | 0.24 s | 1 | details | 
| #12 | WRONG ANSWER | 0.25 s | 1 | details | 
| #13 | WRONG ANSWER | 0.26 s | 1 | details | 
| #14 | WRONG ANSWER | 0.23 s | 1 | details | 
| #15 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #16 | WRONG ANSWER | 0.28 s | 2 | details | 
| #17 | WRONG ANSWER | 0.30 s | 2 | details | 
| #18 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #19 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #20 | WRONG ANSWER | 0.29 s | 2 | details | 
| #21 | WRONG ANSWER | 0.29 s | 2 | details | 
| #22 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #23 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #24 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #25 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #26 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #27 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #28 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #29 | TIME LIMIT EXCEEDED | -- | 3 | details | 
| #30 | WRONG ANSWER | 0.95 s | 3 | details | 
| #31 | TIME LIMIT EXCEEDED | -- | 3 | details | 
| #32 | TIME LIMIT EXCEEDED | -- | 3 | details | 
| #33 | WRONG ANSWER | 0.85 s | 3 | details | 
| #34 | TIME LIMIT EXCEEDED | -- | 3 | details | 
| #35 | WRONG ANSWER | 0.99 s | 3 | details | 
| #36 | TIME LIMIT EXCEEDED | -- | 3 | details | 
| #37 | TIME LIMIT EXCEEDED | -- | 4 | details | 
| #38 | WRONG ANSWER | 0.96 s | 4 | details | 
| #39 | TIME LIMIT EXCEEDED | -- | 4 | details | 
| #40 | TIME LIMIT EXCEEDED | -- | 4 | details | 
| #41 | WRONG ANSWER | 0.84 s | 4 | details | 
| #42 | WRONG ANSWER | 0.99 s | 4 | details | 
| #43 | TIME LIMIT EXCEEDED | -- | 4 | details | 
| #44 | TIME LIMIT EXCEEDED | -- | 4 | details | 
| #45 | TIME LIMIT EXCEEDED | -- | 4 | details | 
| #46 | TIME LIMIT EXCEEDED | -- | 4 | details | 
| #47 | TIME LIMIT EXCEEDED | -- | 4 | details | 
| #48 | TIME LIMIT EXCEEDED | -- | 4 | details | 
| #49 | TIME LIMIT EXCEEDED | -- | 4 | details | 
| #50 | TIME LIMIT EXCEEDED | -- | 4 | details | 
| #51 | TIME LIMIT EXCEEDED | -- | 4 | details | 
| #52 | TIME LIMIT EXCEEDED | -- | 4 | details | 
Code
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
/**
 *
 * @author DevBonBon
 */
public class Datatahti_taulukko {
    public static class SetFinder implements Runnable {
        private final int[] ints;
        private final int startIndex;
        private final int endIndex;
        private final int maxDifferent;
        //
        private final AtomicInteger result;
        private final AtomicBoolean done;
        public SetFinder(int[] ints, int startIndex, int endIndex, int maxDifferent) {
            this.ints = ints;
            this.startIndex = startIndex;
            this.endIndex = endIndex;
            this.maxDifferent = maxDifferent;
            this.result = new AtomicInteger(0);
            this.done = new AtomicBoolean(false);
        }
        public int getResult() {
            return this.result.get();
        }
        public boolean isDone() {
            return this.done.get();
        }
        @Override
        public void run() {
            //This still needs some tweaking, but it's 3AM, so no
            for (int i = startIndex; i < endIndex; i++) {
                for (int j = i; j < ints.length; j++) {
                    if (!tooManyDifferent(Arrays.copyOfRange(ints, i, j + 1), maxDifferent)) {
                        this.result.incrementAndGet();
                    } else {
                        break;
                    }
                }
            }
            this.done.lazySet(true);
        }
        public static final boolean tooManyDifferent(int[] ints, int maxDifferent) {
            Set<Integer> set = new HashSet<>();
            for (int i : ints) {
                set.add(i);
                if (set.size() > maxDifferent) {
                    return true;
                }
            }
            return false;
        }
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        //I read that split is actually "slow" (only hundreds of milliseconds slower, when iterating
        //hundreds of thousands of times) so lets try something different
        //First inputline
        String fl = input.nextLine();
        //Get the size of the table and max different ints in any subset
        int size = Integer.parseInt(fl.substring(0, fl.indexOf(" ", 1)));
        int maxDifferent = Integer.parseInt(fl.substring(fl.indexOf(" ", 1) + 1, fl.length()));
        //NOTE: Came up with something better
        String tableString = input.nextLine();
        //Convert tableString into an int array
        int pow[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
        int[] tableInts = new int[size];
        int length = tableString.length();
        int index = length - 1;
        int spot = tableInts.length - 1;
        int number = 0;
        //Iterates through all characters from the back and adds them together
        while (index >= 0) {
            char c = tableString.charAt(index);
            if (c != ' ') {
                switch (c) {
                    case '0':
                        break;
                    default:
                        number += (c - '0') * pow[length - index - 1];
                        break;
                }
            } else {
                tableInts[spot] = number;
                number = 0;
                //Get ready for next iteration
                length = index;
                spot--;
            }
            index--;
        }
        //Also get the last number
        tableInts[spot] = number;
        //So let's be greedy, who needs efficiency anyway...
        //I've got some ideas, but I'm currious to see how this goes
        //NOTE: it's pretty stupid that this actually works
        long result = 0;
        //The amount of threads we want to create, with a pinch of magic numbers
        int threads;
        if (size <= 50) {
            threads = 1;
        } else {
            threads = 6;
        }
        SetFinder finders[] = new SetFinder[threads];
        boolean findersDone[] = new boolean[threads];
        //Create and start the threads
//        finders[0] = new SetFinder(tableInts, 0, (size / threads), maxDifferent);
//        finders[1] = new SetFinder(tableInts, (size / threads), 2 * (size / threads), maxDifferent);
//        finders[2] = new SetFinder(tableInts, 2 * (size / threads), 3 * (size / threads), maxDifferent);
//        finders[3] = new SetFinder(tableInts, 3 * (size / threads), size, maxDifferent);
        for (int i = 0; i < threads; i++) {
            finders[i] = new SetFinder(tableInts, i * (size / threads), (i + 1) * (size / threads), maxDifferent);
            finders[i].run();
            findersDone[i] = false;
        }
        //Check all threads and get their results
        int allDone = 0;
        while (allDone < threads) {
            for (int i = 0; i < threads; i++) {
                if (!findersDone[i] && finders[i].isDone()) {
                    findersDone[i] = true;
                    result += finders[i].getResult();
                    allDone++;
                }
            }
        }
        //Aaaaaand output it
        System.out.println(result);
    }
}
Test details
Test 1
Group: 1
Verdict: WRONG ANSWER
| input | 
|---|
| 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... | 
| correct output | 
|---|
| 5050 | 
| user output | 
|---|
| 5040 | 
Test 2
Group: 1
Verdict: WRONG ANSWER
| input | 
|---|
| 100 1 1 1 1 1 2 2 1 1 2 2 2 2 2 1 1 ... | 
| correct output | 
|---|
| 190 | 
| user output | 
|---|
| 180 | 
Test 3
Group: 1
Verdict: WRONG ANSWER
| input | 
|---|
| 100 1 5 9 9 6 9 8 1 4 7 7 8 9 5 5 6 ... | 
| correct output | 
|---|
| 110 | 
| user output | 
|---|
| 106 | 
Test 4
Group: 1
Verdict: WRONG ANSWER
| input | 
|---|
| 100 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... | 
| correct output | 
|---|
| 5050 | 
| user output | 
|---|
| 5040 | 
Test 5
Group: 1
Verdict: WRONG ANSWER
| input | 
|---|
| 100 2 2 1 2 1 2 2 1 1 2 1 1 2 1 2 1 ... | 
| correct output | 
|---|
| 5050 | 
| user output | 
|---|
| 5040 | 
Test 6
Group: 1
Verdict: WRONG ANSWER
| input | 
|---|
| 100 2 2 3 1 1 2 2 3 1 2 1 1 1 3 3 1 ... | 
| correct output | 
|---|
| 379 | 
| user output | 
|---|
| 372 | 
Test 7
Group: 1
Verdict: WRONG ANSWER
| input | 
|---|
| 100 2 4 6 10 8 6 8 10 8 4 7 8 9 6 2 ... | 
| correct output | 
|---|
| 245 | 
| user output | 
|---|
| 238 | 
Test 8
Group: 1
Verdict: WRONG ANSWER
| input | 
|---|
| 100 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... | 
| correct output | 
|---|
| 5050 | 
| user output | 
|---|
| 5040 | 
Test 9
Group: 1
Verdict: WRONG ANSWER
| input | 
|---|
| 100 5 4 4 2 2 4 3 3 2 3 4 3 5 3 1 5 ... | 
| correct output | 
|---|
| 5050 | 
| user output | 
|---|
| 5040 | 
Test 10
Group: 1
Verdict: WRONG ANSWER
| input | 
|---|
| 100 5 5 3 4 1 1 1 1 4 5 5 4 6 6 3 3 ... | 
| correct output | 
|---|
| 1488 | 
| user output | 
|---|
| 1478 | 
Test 11
Group: 1
Verdict: WRONG ANSWER
| input | 
|---|
| 100 5 10 1 1 9 1 6 9 4 3 10 9 2 4 2 ... | 
| correct output | 
|---|
| 743 | 
| user output | 
|---|
| 733 | 
Test 12
Group: 1
Verdict: WRONG ANSWER
| input | 
|---|
| 100 10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... | 
| correct output | 
|---|
| 5050 | 
| user output | 
|---|
| 5040 | 
Test 13
Group: 1
Verdict: WRONG ANSWER
| input | 
|---|
| 100 10 9 4 9 1 9 1 5 2 10 10 9 3 9 6 ... | 
| correct output | 
|---|
| 5050 | 
| user output | 
|---|
| 5040 | 
Test 14
Group: 1
Verdict: WRONG ANSWER
| input | 
|---|
| 100 10 80 59 58 87 28 83 83 93 96 24 ... | 
| correct output | 
|---|
| 994 | 
| user output | 
|---|
| 984 | 
Test 15
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 5000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... | 
| correct output | 
|---|
| 12502500 | 
| user output | 
|---|
| (empty) | 
Test 16
Group: 2
Verdict: WRONG ANSWER
| input | 
|---|
| 5000 1 2 2 2 1 2 1 1 1 2 2 1 2 1 1 1 ... | 
| correct output | 
|---|
| 10148 | 
| user output | 
|---|
| 10146 | 
Test 17
Group: 2
Verdict: WRONG ANSWER
| input | 
|---|
| 5000 1 434568 634119 102509 107238 72... | 
| correct output | 
|---|
| 5000 | 
| user output | 
|---|
| 4998 | 
Test 18
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 5000 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... | 
| correct output | 
|---|
| 12502500 | 
| user output | 
|---|
| (empty) | 
Test 19
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 5000 2 2 1 1 1 2 2 2 2 1 1 1 1 2 1 2 ... | 
| correct output | 
|---|
| 12502500 | 
| user output | 
|---|
| (empty) | 
Test 20
Group: 2
Verdict: WRONG ANSWER
| input | 
|---|
| 5000 2 1 3 2 2 3 3 1 2 1 2 1 2 3 1 2 ... | 
| correct output | 
|---|
| 22451 | 
| user output | 
|---|
| 22448 | 
Test 21
Group: 2
Verdict: WRONG ANSWER
| input | 
|---|
| 5000 2 132968 414421 468358 432744 43... | 
| correct output | 
|---|
| 9999 | 
| user output | 
|---|
| 9996 | 
Test 22
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 5000 100 93 76 87 71 93 74 69 35 92 96 ... | 
| correct output | 
|---|
| 12502500 | 
| user output | 
|---|
| (empty) | 
Test 23
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 5000 100 2 57 51 4 35 76 5 40 51 55 20 ... | 
| correct output | 
|---|
| 2669737 | 
| user output | 
|---|
| (empty) | 
Test 24
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 5000 100 657 823 1773 1801 2785 4107 25... | 
| correct output | 
|---|
| 498978 | 
| user output | 
|---|
| (empty) | 
Test 25
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 5000 4999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... | 
| correct output | 
|---|
| 12502500 | 
| user output | 
|---|
| (empty) | 
Test 26
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 5000 4999 865706 910619 695192 183574 92... | 
| correct output | 
|---|
| 12502500 | 
| user output | 
|---|
| (empty) | 
Test 27
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 5000 5000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... | 
| correct output | 
|---|
| 12502500 | 
| user output | 
|---|
| (empty) | 
Test 28
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 5000 5000 774752 159472 183796 654476 69... | 
| correct output | 
|---|
| 12502500 | 
| user output | 
|---|
| (empty) | 
Test 29
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... | 
| correct output | 
|---|
| 125000250000 | 
| user output | 
|---|
| (empty) | 
Test 30
Group: 3
Verdict: WRONG ANSWER
| input | 
|---|
| 500000 1 28107328 613212742 298033960 7... | 
| correct output | 
|---|
| 500000 | 
| user output | 
|---|
| 499998 | 
Test 31
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... | 
| correct output | 
|---|
| 125000250000 | 
| user output | 
|---|
| (empty) | 
Test 32
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 2 1 1 2 1 1 2 2 1 2 1 2 1 1 2 1 ... | 
| correct output | 
|---|
| 125000250000 | 
| user output | 
|---|
| (empty) | 
Test 33
Group: 3
Verdict: WRONG ANSWER
| input | 
|---|
| 500000 2 3 2 2 3 2 2 2 1 1 2 2 3 2 3 2 ... | 
| correct output | 
|---|
| 2245355 | 
| user output | 
|---|
| 2245352 | 
Test 34
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 2 1 1 1 2 2 2 1 1 2 1 1 2 1 2 1 ... | 
| correct output | 
|---|
| 1570486882 | 
| user output | 
|---|
| (empty) | 
Test 35
Group: 3
Verdict: WRONG ANSWER
| input | 
|---|
| 500000 2 318961563 84011941 882177798 1... | 
| correct output | 
|---|
| 999999 | 
| user output | 
|---|
| 999996 | 
Test 36
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 ... | 
| correct output | 
|---|
| 483793169 | 
| user output | 
|---|
| (empty) | 
Test 37
Group: 4
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... | 
| correct output | 
|---|
| 125000250000 | 
| user output | 
|---|
| (empty) | 
Test 38
Group: 4
Verdict: WRONG ANSWER
| input | 
|---|
| 500000 1 709486749 350496125 796065873 ... | 
| correct output | 
|---|
| 500000 | 
| user output | 
|---|
| 499998 | 
Test 39
Group: 4
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... | 
| correct output | 
|---|
| 125000250000 | 
| user output | 
|---|
| (empty) | 
Test 40
Group: 4
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 ... | 
| correct output | 
|---|
| 125000250000 | 
| user output | 
|---|
| (empty) | 
Test 41
Group: 4
Verdict: WRONG ANSWER
| input | 
|---|
| 500000 2 3 3 3 3 2 1 3 2 1 3 1 2 1 1 1 ... | 
| correct output | 
|---|
| 2255047 | 
| user output | 
|---|
| 2255044 | 
Test 42
Group: 4
Verdict: WRONG ANSWER
| input | 
|---|
| 500000 2 414942284 362802746 108881396 ... | 
| correct output | 
|---|
| 999999 | 
| user output | 
|---|
| 999996 | 
Test 43
Group: 4
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 100 59 14 100 74 49 43 91 84 31 16... | 
| correct output | 
|---|
| 260458849 | 
| user output | 
|---|
| (empty) | 
Test 44
Group: 4
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 1000 505 511 86 321 780 495 106 330... | 
| correct output | 
|---|
| 3694803834 | 
| user output | 
|---|
| (empty) | 
Test 45
Group: 4
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 10000 4956 8463 8582 980 9278 1747 2... | 
| correct output | 
|---|
| 41655235436 | 
| user output | 
|---|
| (empty) | 
Test 46
Group: 4
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 100000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... | 
| correct output | 
|---|
| 125000250000 | 
| user output | 
|---|
| (empty) | 
Test 47
Group: 4
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 100000 40198 78364 3724 51802 378 130... | 
| correct output | 
|---|
| 125000250000 | 
| user output | 
|---|
| (empty) | 
Test 48
Group: 4
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 100000 320513086 811766509 339605137 ... | 
| correct output | 
|---|
| 45001856854 | 
| user output | 
|---|
| (empty) | 
Test 49
Group: 4
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 499999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... | 
| correct output | 
|---|
| 125000250000 | 
| user output | 
|---|
| (empty) | 
Test 50
Group: 4
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 499999 995132060 587162982 59723733 8... | 
| correct output | 
|---|
| 125000250000 | 
| user output | 
|---|
| (empty) | 
Test 51
Group: 4
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 500000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... | 
| correct output | 
|---|
| 125000250000 | 
| user output | 
|---|
| (empty) | 
Test 52
Group: 4
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500000 500000 72083718 753463162 730560260 6... | 
| correct output | 
|---|
| 125000250000 | 
| user output | 
|---|
| (empty) | 
