Submission #63890980


Source Code Expand

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.NoSuchElementException;

public class Main {
    static int N,L;
    static int[] T;
    static int div = 16;
    static int[] two = new int[div];
    static ArrayDeque<Integer>[] group;

    static Pair[] pairs;
    public static void main(String[] args) {
        init();

        setPairs();

        setGroups();

        setAB();
    }

    private static void init(){
        FastScanner sc = new FastScanner();

        N = sc.nextInt();
        L = sc.nextInt();

        T = new int[N];
        for (int i = 0; i < N; i++) {
            T[i] = sc.nextInt();
        }
    }

    private static void setPairs(){
        pairs = new Pair[N];
        for (int i = 0; i < N; i++) {
            pairs[i] = new Pair(T[i],i);
        }

        Arrays.sort(pairs);

        // for (int i = 0; i < N; i++) {
        //     System.out.println(pairs[i].t);
        // }
    }

    private static void setGroups(){
        group = new ArrayDeque[div];
        for (int i = 0; i < div; i++) {
            group[i] = new ArrayDeque<>();
        }

        two[0] = 1;
        for (int i = 1; i < div; i++) {
            two[i] = two[i-1]*2;
        }

        group[0].add(0);
        for (int i = 1; i < N; i++) {
            for (int j = 1; j < div; j++) {
                if (Math.abs(T[i] - two[j-1]) > Math.abs(T[i] - two[j]) && Math.abs(T[i] - two[j+1]) > Math.abs(T[i] - two[j])){
                    group[j].add(i);
                    break;
                }
            }
        }
    }

    private static void setAB(){
        int[] ret = new int[div];
        Arrays.fill(ret,-1);
        int[] ans = new int[N];
        int index = 0;
        // System.out.println("ret");
        for (int i = 0; i < div; i++) {
            if (group[i].isEmpty()) continue;

            ret[i] = group[i].remove();
            // System.out.println(ret[i]);
            ans[index] = ret[i];
            index++;
        }

        int[] a = new int[N];
        int[] b = new int[N];
        Arrays.fill(a,-1);
        Arrays.fill(b,-1);

        for (int i = div - 1; i >= 0; i--) {
            while (!group[i].isEmpty()){
                ans[index] = group[i].remove();
                index++;
            }
            if (ret[i] != -1) {
                a[index - 1] = i;
            }
        }

        // System.out.println(ans[1]);

        // for (int i = 0; i < N; i++) {
        //     System.out.println(ans[a[i]] + " " + ans[b[i]]);
        // }

        for (int i = 0; i < N-1; i++) {
            if (a[i] == -1){
                a[i] = i+1;
            }
            if (b[i] == -1){
                b[i] = i+1;
            }
        }
        a[N-1] = 0;
        b[N-1] = 0;

        // System.out.println("ans");
        // for (int i = 0; i < N; i++) {
        //     System.out.println(ans[i]);
        // }
//
        // System.out.println("ab");
        // for (int i = 0; i < N; i++) {
        //     System.out.println(a[i] + " " + b[i]);
        // }
//
        // System.out.println("out");
        // for (int i = 0; i < N; i++) {
        //     System.out.println(ans[a[i]] + " " + ans[b[i]]);
        // }

        int[] A = new int[N];
        int[] B = new int[N];
        for (int i = 0; i < N; i++) {
            A[ans[i]] = ans[a[i]];
            B[ans[i]] = ans[b[i]];
        }

        // System.out.println("true");
        System.out.println(ans[1] + " " + ans[1]);
        for (int i = 1; i < N; i++) {
            System.out.println(A[i] + " " + B[i]);
        }
    }

    private static class Pair implements Comparable<Pair>{
        int t, index;
        public Pair(int A,int B){
            t = A;
            index = B;
        }

        @Override
        public int compareTo(Pair o) {
            return Integer.compare(t,o.t);
        }
    }

    private static class FastScanner {
        private final InputStream in = System.in;
        private final byte[] buffer = new byte[1024];
        private int ptr = 0;
        private int buflen = 0;

        private boolean hasNextByte() {
            if (ptr < buflen) {
                return true;
            } else {
                ptr = 0;
                try {
                    buflen = in.read(buffer);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return buflen > 0;
            }
        }

        private int readByte() {
            if (hasNextByte()) return buffer[ptr++];
            else return -1;
        }

        private static boolean isPrintableChar(int c) {
            return 33 <= c && c <= 126;
        }

        public boolean hasNext() {
            while (hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++;
            return !hasNextByte();
        }

        public String next() {
            if (hasNext()) throw new NoSuchElementException();
            StringBuilder sb = new StringBuilder();
            int b = readByte();
            while (isPrintableChar(b)) {
                sb.appendCodePoint(b);
                b = readByte();
            }
            return sb.toString();
        }

        public long nextLong() {
            if (hasNext()) throw new NoSuchElementException();
            long n = 0;
            boolean minus = false;
            int b = readByte();
            if (b == '-') {
                minus = true;
                b = readByte();
            }
            if (b < '0' || '9' < b) {
                throw new NumberFormatException();
            }
            while (true) {
                if ('0' <= b && b <= '9') {
                    n *= 10;
                    n += b - '0';
                } else if (b == -1 || !isPrintableChar(b)) {
                    return minus ? -n : n;
                } else {
                    throw new NumberFormatException();
                }
                b = readByte();
            }
        }

        public int nextInt() {
            long nl = nextLong();
            if (nl < Integer.MIN_VALUE || nl > Integer.MAX_VALUE) throw new NumberFormatException();
            return (int) nl;
        }

        public double nextDouble() {
            return Double.parseDouble(next());
        }
    }
}

Submission Info

Submission Time
Task A - Cleaning Up
User AAH_tomato
Language Java (OpenJDK 17)
Score 131129206
Code Size 6604 Byte
Status AC
Exec Time 69 ms
Memory 37632 KiB

Compile Error

Note: Main.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

Judge Result

Set Name test_ALL
Score / Max Score 131129206 / 150000000
Status
AC × 150
Set Name Test Cases
test_ALL test_0000.txt, test_0001.txt, test_0002.txt, test_0003.txt, test_0004.txt, test_0005.txt, test_0006.txt, test_0007.txt, test_0008.txt, test_0009.txt, test_0010.txt, test_0011.txt, test_0012.txt, test_0013.txt, test_0014.txt, test_0015.txt, test_0016.txt, test_0017.txt, test_0018.txt, test_0019.txt, test_0020.txt, test_0021.txt, test_0022.txt, test_0023.txt, test_0024.txt, test_0025.txt, test_0026.txt, test_0027.txt, test_0028.txt, test_0029.txt, test_0030.txt, test_0031.txt, test_0032.txt, test_0033.txt, test_0034.txt, test_0035.txt, test_0036.txt, test_0037.txt, test_0038.txt, test_0039.txt, test_0040.txt, test_0041.txt, test_0042.txt, test_0043.txt, test_0044.txt, test_0045.txt, test_0046.txt, test_0047.txt, test_0048.txt, test_0049.txt, test_0050.txt, test_0051.txt, test_0052.txt, test_0053.txt, test_0054.txt, test_0055.txt, test_0056.txt, test_0057.txt, test_0058.txt, test_0059.txt, test_0060.txt, test_0061.txt, test_0062.txt, test_0063.txt, test_0064.txt, test_0065.txt, test_0066.txt, test_0067.txt, test_0068.txt, test_0069.txt, test_0070.txt, test_0071.txt, test_0072.txt, test_0073.txt, test_0074.txt, test_0075.txt, test_0076.txt, test_0077.txt, test_0078.txt, test_0079.txt, test_0080.txt, test_0081.txt, test_0082.txt, test_0083.txt, test_0084.txt, test_0085.txt, test_0086.txt, test_0087.txt, test_0088.txt, test_0089.txt, test_0090.txt, test_0091.txt, test_0092.txt, test_0093.txt, test_0094.txt, test_0095.txt, test_0096.txt, test_0097.txt, test_0098.txt, test_0099.txt, test_0100.txt, test_0101.txt, test_0102.txt, test_0103.txt, test_0104.txt, test_0105.txt, test_0106.txt, test_0107.txt, test_0108.txt, test_0109.txt, test_0110.txt, test_0111.txt, test_0112.txt, test_0113.txt, test_0114.txt, test_0115.txt, test_0116.txt, test_0117.txt, test_0118.txt, test_0119.txt, test_0120.txt, test_0121.txt, test_0122.txt, test_0123.txt, test_0124.txt, test_0125.txt, test_0126.txt, test_0127.txt, test_0128.txt, test_0129.txt, test_0130.txt, test_0131.txt, test_0132.txt, test_0133.txt, test_0134.txt, test_0135.txt, test_0136.txt, test_0137.txt, test_0138.txt, test_0139.txt, test_0140.txt, test_0141.txt, test_0142.txt, test_0143.txt, test_0144.txt, test_0145.txt, test_0146.txt, test_0147.txt, test_0148.txt, test_0149.txt
Case Name Status Exec Time Memory
test_0000.txt AC 64 ms 37456 KiB
test_0001.txt AC 65 ms 37300 KiB
test_0002.txt AC 65 ms 37460 KiB
test_0003.txt AC 65 ms 37472 KiB
test_0004.txt AC 64 ms 37188 KiB
test_0005.txt AC 64 ms 37280 KiB
test_0006.txt AC 64 ms 37264 KiB
test_0007.txt AC 65 ms 37220 KiB
test_0008.txt AC 65 ms 37292 KiB
test_0009.txt AC 64 ms 37520 KiB
test_0010.txt AC 66 ms 37532 KiB
test_0011.txt AC 65 ms 37516 KiB
test_0012.txt AC 64 ms 37256 KiB
test_0013.txt AC 66 ms 37480 KiB
test_0014.txt AC 64 ms 37112 KiB
test_0015.txt AC 63 ms 37168 KiB
test_0016.txt AC 65 ms 37440 KiB
test_0017.txt AC 65 ms 37320 KiB
test_0018.txt AC 65 ms 37212 KiB
test_0019.txt AC 65 ms 37604 KiB
test_0020.txt AC 65 ms 37276 KiB
test_0021.txt AC 66 ms 37292 KiB
test_0022.txt AC 65 ms 37604 KiB
test_0023.txt AC 64 ms 37452 KiB
test_0024.txt AC 64 ms 37456 KiB
test_0025.txt AC 66 ms 37272 KiB
test_0026.txt AC 67 ms 37240 KiB
test_0027.txt AC 65 ms 37236 KiB
test_0028.txt AC 66 ms 37472 KiB
test_0029.txt AC 66 ms 37320 KiB
test_0030.txt AC 64 ms 37456 KiB
test_0031.txt AC 66 ms 37444 KiB
test_0032.txt AC 66 ms 37172 KiB
test_0033.txt AC 64 ms 37196 KiB
test_0034.txt AC 64 ms 37456 KiB
test_0035.txt AC 65 ms 37572 KiB
test_0036.txt AC 66 ms 37464 KiB
test_0037.txt AC 64 ms 37256 KiB
test_0038.txt AC 67 ms 37280 KiB
test_0039.txt AC 65 ms 37308 KiB
test_0040.txt AC 65 ms 37472 KiB
test_0041.txt AC 66 ms 37320 KiB
test_0042.txt AC 64 ms 37296 KiB
test_0043.txt AC 63 ms 37480 KiB
test_0044.txt AC 65 ms 37532 KiB
test_0045.txt AC 65 ms 37188 KiB
test_0046.txt AC 66 ms 37532 KiB
test_0047.txt AC 66 ms 37208 KiB
test_0048.txt AC 65 ms 37304 KiB
test_0049.txt AC 63 ms 37456 KiB
test_0050.txt AC 64 ms 37220 KiB
test_0051.txt AC 65 ms 37272 KiB
test_0052.txt AC 64 ms 37284 KiB
test_0053.txt AC 64 ms 37248 KiB
test_0054.txt AC 65 ms 37284 KiB
test_0055.txt AC 65 ms 37520 KiB
test_0056.txt AC 65 ms 37616 KiB
test_0057.txt AC 66 ms 37476 KiB
test_0058.txt AC 65 ms 37304 KiB
test_0059.txt AC 65 ms 37484 KiB
test_0060.txt AC 63 ms 37256 KiB
test_0061.txt AC 64 ms 37460 KiB
test_0062.txt AC 65 ms 37616 KiB
test_0063.txt AC 66 ms 37212 KiB
test_0064.txt AC 66 ms 37520 KiB
test_0065.txt AC 63 ms 37248 KiB
test_0066.txt AC 66 ms 37220 KiB
test_0067.txt AC 66 ms 37404 KiB
test_0068.txt AC 66 ms 37620 KiB
test_0069.txt AC 69 ms 37632 KiB
test_0070.txt AC 66 ms 37596 KiB
test_0071.txt AC 68 ms 37356 KiB
test_0072.txt AC 67 ms 37256 KiB
test_0073.txt AC 67 ms 37608 KiB
test_0074.txt AC 68 ms 37128 KiB
test_0075.txt AC 66 ms 37172 KiB
test_0076.txt AC 66 ms 37424 KiB
test_0077.txt AC 67 ms 37300 KiB
test_0078.txt AC 65 ms 37192 KiB
test_0079.txt AC 66 ms 37208 KiB
test_0080.txt AC 66 ms 37192 KiB
test_0081.txt AC 65 ms 37292 KiB
test_0082.txt AC 65 ms 37264 KiB
test_0083.txt AC 66 ms 37284 KiB
test_0084.txt AC 65 ms 37612 KiB
test_0085.txt AC 64 ms 37484 KiB
test_0086.txt AC 65 ms 37240 KiB
test_0087.txt AC 64 ms 37260 KiB
test_0088.txt AC 65 ms 37620 KiB
test_0089.txt AC 65 ms 37472 KiB
test_0090.txt AC 65 ms 37632 KiB
test_0091.txt AC 66 ms 37152 KiB
test_0092.txt AC 65 ms 37280 KiB
test_0093.txt AC 65 ms 37272 KiB
test_0094.txt AC 66 ms 37304 KiB
test_0095.txt AC 67 ms 37484 KiB
test_0096.txt AC 67 ms 37612 KiB
test_0097.txt AC 64 ms 37264 KiB
test_0098.txt AC 63 ms 37432 KiB
test_0099.txt AC 65 ms 37400 KiB
test_0100.txt AC 65 ms 37348 KiB
test_0101.txt AC 64 ms 37440 KiB
test_0102.txt AC 64 ms 37188 KiB
test_0103.txt AC 65 ms 37324 KiB
test_0104.txt AC 64 ms 37252 KiB
test_0105.txt AC 65 ms 37400 KiB
test_0106.txt AC 64 ms 37176 KiB
test_0107.txt AC 66 ms 37480 KiB
test_0108.txt AC 65 ms 37260 KiB
test_0109.txt AC 65 ms 37312 KiB
test_0110.txt AC 63 ms 37256 KiB
test_0111.txt AC 63 ms 37260 KiB
test_0112.txt AC 63 ms 37232 KiB
test_0113.txt AC 66 ms 37316 KiB
test_0114.txt AC 65 ms 37500 KiB
test_0115.txt AC 65 ms 37524 KiB
test_0116.txt AC 64 ms 37244 KiB
test_0117.txt AC 65 ms 37284 KiB
test_0118.txt AC 64 ms 37276 KiB
test_0119.txt AC 64 ms 37592 KiB
test_0120.txt AC 65 ms 37588 KiB
test_0121.txt AC 65 ms 37144 KiB
test_0122.txt AC 63 ms 37244 KiB
test_0123.txt AC 65 ms 37208 KiB
test_0124.txt AC 64 ms 37608 KiB
test_0125.txt AC 63 ms 37596 KiB
test_0126.txt AC 64 ms 37420 KiB
test_0127.txt AC 65 ms 37364 KiB
test_0128.txt AC 64 ms 37224 KiB
test_0129.txt AC 64 ms 37176 KiB
test_0130.txt AC 65 ms 37156 KiB
test_0131.txt AC 64 ms 37404 KiB
test_0132.txt AC 64 ms 37476 KiB
test_0133.txt AC 68 ms 37468 KiB
test_0134.txt AC 65 ms 37524 KiB
test_0135.txt AC 64 ms 37260 KiB
test_0136.txt AC 65 ms 37296 KiB
test_0137.txt AC 64 ms 37232 KiB
test_0138.txt AC 66 ms 37284 KiB
test_0139.txt AC 64 ms 37300 KiB
test_0140.txt AC 66 ms 37432 KiB
test_0141.txt AC 63 ms 37180 KiB
test_0142.txt AC 63 ms 37172 KiB
test_0143.txt AC 63 ms 37580 KiB
test_0144.txt AC 63 ms 37460 KiB
test_0145.txt AC 65 ms 37460 KiB
test_0146.txt AC 65 ms 37472 KiB
test_0147.txt AC 63 ms 37124 KiB
test_0148.txt AC 64 ms 37452 KiB
test_0149.txt AC 65 ms 37304 KiB