CSES - Datatähti 2021 alku - Results
Submission details
Task:2021-luvut
Sender:iRobo
Submission time:2020-10-11 18:43:34 +0300
Language:Java
Status:READY
Result:25
Feedback
groupverdictscore
#1ACCEPTED10
#2ACCEPTED15
#30
#40
Test results
testverdicttimegroup
#1ACCEPTED0.13 s1, 2, 3, 4details
#2ACCEPTED0.13 s1, 2, 3, 4details
#3ACCEPTED0.14 s1, 2, 3, 4details
#4ACCEPTED0.13 s1, 2, 3, 4details
#5ACCEPTED0.13 s1, 2, 3, 4details
#6ACCEPTED0.13 s1, 2, 3, 4details
#7ACCEPTED0.13 s1, 2, 3, 4details
#8ACCEPTED0.13 s1, 2, 3, 4details
#9ACCEPTED0.13 s1, 2, 3, 4details
#10ACCEPTED0.13 s1, 2, 3, 4details
#11ACCEPTED0.19 s2, 3, 4details
#12ACCEPTED0.16 s2, 3, 4details
#13ACCEPTED0.18 s2, 3, 4details
#14ACCEPTED0.17 s2, 3, 4details
#15ACCEPTED0.18 s2, 3, 4details
#16ACCEPTED0.18 s2, 3, 4details
#17ACCEPTED0.18 s2, 3, 4details
#18ACCEPTED0.19 s2, 3, 4details
#19ACCEPTED0.18 s2, 3, 4details
#20ACCEPTED0.17 s2, 3, 4details
#21--3, 4details
#22--3, 4details
#23--3, 4details
#24--3, 4details
#25--3, 4details
#26--3, 4details
#27--3, 4details
#28--3, 4details
#29--3, 4details
#30--3, 4details
#31--4details
#32--4details
#33--4details
#34--4details
#35--4details
#36--4details
#37--4details
#38--4details
#39--4details
#40--4details

Code

import java.util.Arrays;
import java.util.Scanner;

public class Main {

    static long n;

    static int firstNon2021 = 4;
    static int numberOf2021Leftwards = 4;
    static int[] locationOf2021 = new int[4];

    static int[] the2021Numbers = new int[4];

    public static void main(String[] args) {

        the2021Numbers[3] = 2;
        the2021Numbers[2] = 0;
        the2021Numbers[1] = 2;
        the2021Numbers[0] = 1;

        Scanner input = new Scanner(System.in);
        n = input.nextLong();
        //n = 100;

        int[] current2021 = new int[20];
        current2021[0] = 1; //the 2021 number is written in reverse order: 1202----------------
        current2021[1] = 2;
        current2021[2] = 0;
        current2021[3] = 2;

        /*
        locationOf2021[0] = 3; //the location of the first number, 2
        locationOf2021[1] = 2; //location of 0
        locationOf2021[2] = 1; //location of 2
        locationOf2021[3] = 0; //the location of the last 2021 number, 1.
         */

        locationOf2021[0] = 3; //the location of the first number, 2
        locationOf2021[1] = 2; //location of 0
        locationOf2021[2] = 1; //location of 2
        locationOf2021[3] = 0; //the location of the last 2021 number, 1.

        for(long i = 0; i < n-1; i++) {
            current2021 = findNext2021Number(current2021);
        }
        String printNumber = "";
        for(int j = 0; j < 20; j++) {
            printNumber = printNumber.concat(Integer.toString(current2021[19-j]));
        }
        System.out.println(Long.parseLong(printNumber));
        /*
        String printNumber;
        for(long i = 0; i < n; i++) {
            printNumber = "";
            for(int j = 0; j < 20; j++) {
                printNumber = printNumber.concat(Integer.toString(current2021[19-j]));
                //System.out.print(Integer.toString(current2021[19-j]));
            }
            //System.out.println();
            System.out.println(Long.parseLong(printNumber) + " locations of 2021: " + locationOf2021[0] + " "
                    + locationOf2021[1] + " " + locationOf2021[2] + " " + locationOf2021[3] + " first non: "
                    + firstNon2021 + " left: " + numberOf2021Leftwards);
            //current2021 = findNext2021Number(new int[]{1,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0});
            current2021 = findNext2021Number(current2021);
        }
         */

    }

    public static int[] findNext2021Number(int[] current2021) {

        while(current2021[firstNon2021] == 9) {
            firstNon2021++;
        }

        if(numberOf2021Leftwards < 4 && firstNon2021 == locationOf2021[3-numberOf2021Leftwards]) {
            //if the current non 2021 number is a 2021 number that gets increased
            current2021[firstNon2021]++;
            numberOf2021Leftwards++;
            for(int i = 0; i < firstNon2021; i++) {
                current2021[i] = 0;
            }
            for(int i = 0; i < numberOf2021Leftwards; i++) {
                current2021[i] = the2021Numbers[i];
                locationOf2021[3-i] = i;
            }
            //firstNon2021 = numberOf2021Leftwards;
            //set all the numbers leftwards of the firstNon2021 to 0 and add the remaining 2021 numbers at the end
            //update the firstNon2021
            //update locationOf2021

            for(int i = locationOf2021[0]-1; i > 0; i--) {
                if(current2021[i] == 0) {
                    locationOf2021[1] = i;
                    //System.out.println(i);
                    break;
                }
            }

            for(int i = 0; i < 5; i++) {
                boolean matches = false;
                for(int j = 0; j < 4; j++) {
                    if(i == locationOf2021[j]) {
                        matches = true;
                        break;
                    }
                }
                if(!matches) {
                    firstNon2021 = i;
                    break;
                }
            }
            numberOf2021Leftwards = firstNon2021;

        } else {
            current2021[firstNon2021]++;
            if(numberOf2021Leftwards != 0 && current2021[firstNon2021] == the2021Numbers[numberOf2021Leftwards-1]) {
                //if the new number becomes one of the 2021 numbers, then this gets executed
                numberOf2021Leftwards--;
                //update the location of the new 2021 number
                locationOf2021[3-numberOf2021Leftwards] = firstNon2021;
            }
            for(int i = 0; i < firstNon2021; i++) {
                current2021[i] = 0;
            }
            for(int i = 0; i < numberOf2021Leftwards; i++) {
                current2021[i] = the2021Numbers[i];
                locationOf2021[3-i] = i;
                //manually set the correct 0 location
            }

            for(int i = locationOf2021[0]-1; i > 0; i--) {
                if(current2021[i] == 0) {
                    locationOf2021[1] = i;
                    //System.out.println(i);
                    break;
                }
            }

            /*
            if(numberOf2021Leftwards > 2 && locationOf2021[0] > firstNon2021-1) {
                locationOf2021[1] = firstNon2021-1;
            }
             */

            for(int i = 0; i < 5; i++) {
                boolean matches = false;
                for(int j = 0; j < 4; j++) {
                    if(i == locationOf2021[j]) {
                        matches = true;
                        break;
                    }
                }
                if(!matches) {
                    firstNon2021 = i;
                    break;
                }
            }
            numberOf2021Leftwards = firstNon2021;
        }

        return current2021;
    }

}

Test details

Test 1

Group: 1, 2, 3, 4

Verdict: ACCEPTED

input
10

correct output
20214

user output
20214

Test 2

Group: 1, 2, 3, 4

Verdict: ACCEPTED

input
359

correct output
202661

user output
202661

Test 3

Group: 1, 2, 3, 4

Verdict: ACCEPTED

input
392

correct output
202819

user output
202819

Test 4

Group: 1, 2, 3, 4

Verdict: ACCEPTED

input
715

correct output
230721

user output
230721

Test 5

Group: 1, 2, 3, 4

Verdict: ACCEPTED

input
278

correct output
202219

user output
202219

Test 6

Group: 1, 2, 3, 4

Verdict: ACCEPTED

input
296

correct output
202318

user output
202318

Test 7

Group: 1, 2, 3, 4

Verdict: ACCEPTED

input
427

correct output
203214

user output
203214

Test 8

Group: 1, 2, 3, 4

Verdict: ACCEPTED

input
565

correct output
208212

user output
208212

Test 9

Group: 1, 2, 3, 4

Verdict: ACCEPTED

input
289

correct output
202311

user output
202311

Test 10

Group: 1, 2, 3, 4

Verdict: ACCEPTED

input
342

correct output
202581

user output
202581

Test 11

Group: 2, 3, 4

Verdict: ACCEPTED

input
964486

correct output
182502018

user output
182502018

Test 12

Group: 2, 3, 4

Verdict: ACCEPTED

input
110979

correct output
20296916

user output
20296916

Test 13

Group: 2, 3, 4

Verdict: ACCEPTED

input
759149

correct output
126108721

user output
126108721

Test 14

Group: 2, 3, 4

Verdict: ACCEPTED

input
234934

correct output
25023210

user output
25023210

Test 15

Group: 2, 3, 4

Verdict: ACCEPTED

input
610310

correct output
120288133

user output
120288133

Test 16

Group: 2, 3, 4

Verdict: ACCEPTED

input
956690

correct output
182027419

user output
182027419

Test 17

Group: 2, 3, 4

Verdict: ACCEPTED

input
608459

correct output
120281827

user output
120281827

Test 18

Group: 2, 3, 4

Verdict: ACCEPTED

input
944777

correct output
175260251

user output
175260251

Test 19

Group: 2, 3, 4

Verdict: ACCEPTED

input
880780

correct output
152270421

user output
152270421

Test 20

Group: 2, 3, 4

Verdict: ACCEPTED

input
418357

correct output
68202361

user output
68202361

Test 21

Group: 3, 4

Verdict:

input
713294506861

correct output
20099206371786

user output
(empty)

Test 22

Group: 3, 4

Verdict:

input
191431126351

correct output
4193020274761

user output
(empty)

Test 23

Group: 3, 4

Verdict:

input
778422318223

correct output
20247733120134

user output
(empty)

Test 24

Group: 3, 4

Verdict:

input
931090767075

correct output
20691282041612

user output
(empty)

Test 25

Group: 3, 4

Verdict:

input
198806129726

correct output
4275365802196

user output
(empty)

Test 26

Group: 3, 4

Verdict:

input
724343399444

correct output
20128443204610

user output
(empty)

Test 27

Group: 3, 4

Verdict:

input
105064053560

correct output
2350677231115

user output
(empty)

Test 28

Group: 3, 4

Verdict:

input
236866700902

correct output
5872395029521

user output
(empty)

Test 29

Group: 3, 4

Verdict:

input
696349488695

correct output
20034225603103

user output
(empty)

Test 30

Group: 3, 4

Verdict:

input
30929267826

correct output
1205256095901

user output
(empty)

Test 31

Group: 4

Verdict:

input
576379198814226780

correct output
4185251600926331891

user output
(empty)

Test 32

Group: 4

Verdict:

input
291698664446913099

correct output
2280132983584730156

user output
(empty)

Test 33

Group: 4

Verdict:

input
693146378550043345

correct output
5270258230724009910

user output
(empty)

Test 34

Group: 4

Verdict:

input
685982323362439932

correct output
5236052744416920782

user output
(empty)

Test 35

Group: 4

Verdict:

input
838865925103308874

correct output
6800200426815679149

user output
(empty)

Test 36

Group: 4

Verdict:

input
766426223219980635

correct output
6112960212822572807

user output
(empty)

Test 37

Group: 4

Verdict:

input
652970397451919317

correct output
4923188580186259818

user output
(empty)

Test 38

Group: 4

Verdict:

input
188458586650539464

correct output
1903508375720755921

user output
(empty)

Test 39

Group: 4

Verdict:

input
157646989818721527

correct output
1525038392797601315

user output
(empty)

Test 40

Group: 4

Verdict:

input
898606361978236778

correct output
7326676702587314407

user output
(empty)