Submission #1543965


Source Code Expand

import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.io.BufferedWriter;
import java.util.InputMismatchException;
import java.io.IOException;
import java.util.ArrayList;
import java.io.Writer;
import java.io.OutputStreamWriter;
import java.util.Comparator;
import java.util.NoSuchElementException;
import java.util.Collections;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author ogiekako
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        MyScanner in = new MyScanner(inputStream);
        MyPrintWriter out = new MyPrintWriter(outputStream);
        TaskD solver = new TaskD();
        solver.solve(1, in, out);
        out.close();
    }

    static class TaskD {
        public void solve(int testNumber, MyScanner in, MyPrintWriter out) {
            String A = in.next(), B = in.next();
            int n = A.length();
            int m = 0;
            for (char b : B.toCharArray()) {
                if (b == '1') m++;
            }
            if (m == 0) {
                out.println(A.equals(B) ? 0 : -1);
                return;
            }

            B = B + B + B + B + B;
            int[] bs = new int[m * 5];
            m = 0;
            for (int i = 0; i < B.length(); i++) {
                if (B.charAt(i) == '1') {
                    bs[m++] = i;
                }
            }
            int res = Integer.MAX_VALUE;
            for (int x = -n; x <= n; x++) {
                ArrayList<E> es = new ArrayList<E>();
                int add = 0;
                for (int i = 0; i < n; i++) {
                    if (A.charAt(i) == '1' && B.charAt(2 * n + i + x) == '0') {
                        add++;
                        E e = new E();
                        int k = Arrays.binarySearch(bs, 2 * n + i + x);
                        int l = -k - 2;
                        int r = -k - 1;
                        e.l = 2 * n + i - bs[l];
                        e.r = bs[r] - (2 * n + i);
                        if (bs[l] < Math.min(2 * n + i, 2 * n + i + x) && Math.max(2 * n + i, 2 * n + i + x) < bs[r]) {
                            es.add(e);
                        }
                    } else if (A.charAt(i) == '0' && B.charAt(2 * n + i + x) == '1') {
                        add++;
                    }
                }
                E zero = new E();
                zero.l = 0;
                zero.r = 0;
                es.add(zero);
                Collections.sort(es, Comparator.reverseOrder());
                int r = 0;
                for (E e : es) {
                    int l = e.l;
                    res = Math.min(res, add + Math.min(2 * l + r + Math.abs(r - x), 2 * r + l + Math.abs(l + x)));
                    r = Math.max(r, e.r);
                }
//            Debug.debug(res, es, x);
            }
            out.println(res);
        }

        class E implements Comparable<E> {
            int l;
            int r;


            public int compareTo(E o) {
                return l - o.l;
            }


            public String toString() {
                return l + " " + r;
            }

        }

    }

    static class MyPrintWriter {
        PrintWriter out;

        public MyPrintWriter(OutputStream outputStream) {
            out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
        }

        public MyPrintWriter(Writer writer) {
            out = new PrintWriter(writer);
        }

        public void println(int a) {
            out.println(a);
        }

        public void close() {
            out.close();
        }

    }

    static class MyScanner {
        private final InputStream in;
        private static final int BUFSIZE = 65536;
        int bufLen;
        int bufPtr;
        byte[] buf = new byte[BUFSIZE];
        private char[] strBuf = new char[BUFSIZE];

        public MyScanner(InputStream in) {
            this.in = in;
        }

        public int read() {
            if (bufLen == -1)
                throw new InputMismatchException();
            if (bufPtr >= bufLen) {
                bufPtr = 0;
                try {
                    bufLen = in.read(buf);
                } catch (IOException e) {
                    throw new InputMismatchException();
                }
                if (bufLen <= 0)
                    return -1;
            }
            return buf[bufPtr++];
        }

        public String next() {
            int strLen = 0;
            int c;
            do {
                c = read();
                if (c == -1) throw new NoSuchElementException();
            } while (Character.isWhitespace(c));
            do {
                if (strLen + 1 >= strBuf.length) {
                    char[] tmp = new char[strBuf.length * 2];
                    System.arraycopy(strBuf, 0, tmp, 0, strBuf.length);
                    strBuf = tmp;
                }
                strBuf[strLen++] = (char) c;
                c = read();
            } while (c != -1 && !Character.isWhitespace(c));
            return new String(strBuf, 0, strLen);
        }

    }
}

Submission Info

Submission Time
Task D - Shift and Flip
User ogiekako
Language Java8 (OpenJDK 1.8.0)
Score 1000
Code Size 5549 Byte
Status AC
Exec Time 599 ms
Memory 92572 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1000 / 1000
Status
AC × 4
AC × 54
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt
All sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt, subtask_1_38.txt, subtask_1_39.txt, subtask_1_40.txt, subtask_1_41.txt, subtask_1_42.txt, subtask_1_43.txt, subtask_1_44.txt, subtask_1_45.txt, subtask_1_46.txt
Case Name Status Exec Time Memory
sample_01.txt AC 72 ms 19668 KB
sample_02.txt AC 71 ms 18644 KB
sample_03.txt AC 72 ms 21460 KB
sample_04.txt AC 70 ms 20308 KB
subtask_1_01.txt AC 70 ms 19540 KB
subtask_1_02.txt AC 74 ms 19156 KB
subtask_1_03.txt AC 71 ms 15956 KB
subtask_1_04.txt AC 73 ms 21204 KB
subtask_1_05.txt AC 127 ms 21296 KB
subtask_1_06.txt AC 79 ms 21332 KB
subtask_1_07.txt AC 124 ms 19524 KB
subtask_1_08.txt AC 72 ms 20948 KB
subtask_1_09.txt AC 73 ms 21844 KB
subtask_1_10.txt AC 79 ms 19412 KB
subtask_1_11.txt AC 382 ms 41080 KB
subtask_1_12.txt AC 282 ms 26376 KB
subtask_1_13.txt AC 384 ms 41464 KB
subtask_1_14.txt AC 564 ms 65888 KB
subtask_1_15.txt AC 403 ms 59208 KB
subtask_1_16.txt AC 459 ms 51232 KB
subtask_1_17.txt AC 537 ms 49804 KB
subtask_1_18.txt AC 582 ms 48880 KB
subtask_1_19.txt AC 479 ms 49008 KB
subtask_1_20.txt AC 449 ms 50668 KB
subtask_1_21.txt AC 390 ms 63488 KB
subtask_1_22.txt AC 599 ms 66756 KB
subtask_1_23.txt AC 491 ms 91380 KB
subtask_1_24.txt AC 465 ms 91076 KB
subtask_1_25.txt AC 520 ms 92572 KB
subtask_1_26.txt AC 84 ms 19540 KB
subtask_1_27.txt AC 97 ms 21588 KB
subtask_1_28.txt AC 133 ms 24416 KB
subtask_1_29.txt AC 232 ms 30520 KB
subtask_1_30.txt AC 494 ms 52800 KB
subtask_1_31.txt AC 73 ms 19668 KB
subtask_1_32.txt AC 82 ms 17108 KB
subtask_1_33.txt AC 101 ms 19668 KB
subtask_1_34.txt AC 138 ms 27740 KB
subtask_1_35.txt AC 248 ms 34608 KB
subtask_1_36.txt AC 527 ms 51444 KB
subtask_1_37.txt AC 92 ms 18260 KB
subtask_1_38.txt AC 101 ms 20308 KB
subtask_1_39.txt AC 141 ms 25664 KB
subtask_1_40.txt AC 243 ms 35756 KB
subtask_1_41.txt AC 487 ms 48092 KB
subtask_1_42.txt AC 495 ms 53000 KB
subtask_1_43.txt AC 402 ms 45260 KB
subtask_1_44.txt AC 479 ms 46408 KB
subtask_1_45.txt AC 505 ms 50568 KB
subtask_1_46.txt AC 400 ms 50028 KB