CSES - Datatähti 2017 alku - Results
Submission details
Task:Järjestys
Sender:YvMa^Na9
Submission time:2016-10-04 21:16:40 +0300
Language:Java
Status:READY
Result:56
Feedback
groupverdictscore
#1ACCEPTED19
#2ACCEPTED37
#30
Test results
testverdicttimegroup
#1ACCEPTED0.13 s1details
#2ACCEPTED0.26 s2details
#3--3details

Code

import java.util.Scanner;
import java.util.Arrays;
import java.util.ArrayList;
public class jarjestys {

    public static void main (String[] args) {
        Jarjestys();
    }

    public static void Jarjestys() {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int[] nums = new int[a];
        ArrayList<Integer> turns = new ArrayList<Integer>();
        for (int j = 0; j < a; j++) {
            nums[j] = scanner.nextInt();
        }
        for (int i = a; i > 1; i--) {
            //System.out.println("FL RES: " + findLargest(nums, i));
            if (findLargest(nums, i) != i) {
                int y = findLargest(nums, i);
           //     System.out.println("y: " + y + "preflip1:" + Arrays.toString(nums));
                flip(nums, y);
          //      System.out.println("y: " + y + "afterflip1:" + Arrays.toString(nums));
                turns.add(y+1);
                int x = nums.length - a + i - 1;
                flip(nums, x);
         //       System.out.println("x: " + x + "afterflip2" + Arrays.toString(nums));
                turns.add(x+1);
                //System.out.println(Arrays.toString(nums));
            }
        }
        System.out.println(turns.size());
        //System.out.println(Arrays.toString(turns.toArray()));
        for (int i = 0; i < turns.size(); i++) {
            System.out.print(turns.get(i) + " ");
        }

    }
    private static int findLargest(int[] array, int toSearch) { //returns indexOf(largest)
        for(int i = 0; i < toSearch; i++) {
            if (array[i] == toSearch) {
                return i;
            }
        }
        return -1;
    }
    private static void flip(int[] array, int toFlip) {
        int[] temp = Arrays.copyOfRange(array, 0, toFlip + 1); //-1??
        //System.out.println("TEMP:" + Arrays.toString(temp));
        for(int i = 0; i <= toFlip; i++) {
            //System.out.println(toFlip-i-1);
            array[toFlip-i] = temp[i];
        }
    }
}

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
10
9 3 4 7 6 5 10 2 8 1

correct output
32
10 10 9 10 9 8 7 9 4 2 1 4 5 2...

user output
18
7 10 4 9 7 8 4 7 6 6 5 5 3 4 3...

Test 2

Group: 2

Verdict: ACCEPTED

input
1000
650 716 982 41 133 1000 876 92...

correct output
3984
207 207 206 207 128 127 126 12...

user output
1998
6 1000 904 999 964 998 333 997...

Test 3

Group: 3

Verdict:

input
100000
94703 47808 62366 31885 7091 8...

correct output
399956
98676 98676 98675 98676 62994 ...

user output
(empty)