Submission #42920730


Source Code Expand

import std;

void read(T...)(string S, ref T args) {
    auto buf = S.split;
    foreach (i, ref arg; args) {
        arg = buf[i].to!(typeof(arg));
    }
}

void main () {
    int HA, WA; readln.read(HA, WA);
    string[] A;
    foreach (_; 0..HA) {
        A ~= readln.chomp;
    }

    int HB, WB; readln.read(HB, WB);
    string[] B;
    foreach (_; 0..HB) {
        B ~= readln.chomp;
    }

    int HX, WX; readln.read(HX, WX);
    string[] X;
    foreach (_; 0..HX) {
        X ~= readln.chomp;
    }

    solve(A, B, X);
}

void solve (string[] A, string[] B, string[] X) {
    A = cut(A);
    B = cut(B);
    X = cut(X);

    char[][] base;
    base.length = X.length;
    foreach (ref x; base) {
        x.length = X[0].length;
    }

    if (X.length < max(A.length, B.length) || X[0].length < max(A[0].length, B[0].length)) {
        writeln("No");
        return;
    }

    foreach (i; 0..base.length) {
        foreach (j; 0..base[i].length) {
            if (base.length < i+A.length || base[0].length < j+A[0].length) {
                continue;
            }
            foreach (i2; 0..base.length) {
                foreach (j2; 0..base[i].length) {
                    if (base.length < i2+B.length || base[0].length < j2+B[0].length) {
                        continue;
                    }
                    // reset
                    foreach (ref x; base) {
                        x[] = '.';
                    }
                    // Aを貼る
                    foreach (k; 0..A.length) {
                        foreach (l; 0..A[k].length) {
                            base[k+i][l+j] = A[k][l];
                        }
                    }
                    // Bを貼る
                    foreach (k; 0..B.length) {
                        foreach (l; 0..B[k].length) {
                            if (B[k][l] == '#') {
                                base[k+i2][l+j2] = B[k][l];
                            }
                        }
                    }

                    if (cut(cast(string[])base.dup) == X) {
                        writeln("Yes");
                        return;
                    }
                }
            }
        }
    }

    writeln("No");
}

string[] cut (string[] S) {
    // 上のカット
    int up = 0;
    foreach (i; 0..S.length) {
        bool has_black = false;
        foreach (j; 0..S[i].length) {
            if (S[i][j] == '#') {
                has_black = true;
                break;
            }
        }
        if (has_black) {
            break;
        }
        up++;
    }

    S = S[up..$];

    // 下のカット
    int down = 0;
    foreach_reverse (i; 0..S.length) {
        bool has_black = false;
        foreach (j; 0..S[i].length) {
            if (S[i][j] == '#') {
                has_black = true;
                break;
            }
        }
        if (has_black) {
            break;
        }
        down++;
    }

    S = S[0..$-down];

    // 右のカット
    int right = 0;
    foreach_reverse (i; 0..S[0].length) {
        bool has_black = false;
        foreach (j; 0..S.length) {
            if (S[j][i] == '#') {
                has_black = true;
                break;
            }
        }
        if (has_black) {
            break;
        }
        right++;
    }

    foreach (i; 0..S.length) {
        S[i] = S[i][0..$-right];
    }

    // 左のカット
    int left = 0;
    foreach (i; 0..S[0].length) {
        bool has_black = false;
        foreach (j; 0..S.length) {
            if (S[j][i] == '#') {
                has_black = true;
                break;
            }
        }
        if (has_black) {
            break;
        }
        left++;
    }

    foreach (i; 0..S.length) {
        S[i] = S[i][left..$];
    }

    return S;
}

Submission Info

Submission Time
Task C - Ideal Sheet
User InTheBloom
Language D (DMD 2.091.0)
Score 300
Code Size 3972 Byte
Status AC
Exec Time 17 ms
Memory 4416 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 300 / 300
Status
AC × 4
AC × 32
Set Name Test Cases
Sample example_00.txt, example_01.txt, example_02.txt, example_03.txt
All example_00.txt, example_01.txt, example_02.txt, example_03.txt, hand_00.txt, hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, hand_05.txt, hand_06.txt, hand_07.txt, random2_00.txt, random2_01.txt, random2_02.txt, random2_03.txt, random2_04.txt, random2_05.txt, random2_06.txt, random2_07.txt, random2_08.txt, random2_09.txt, random_00.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt
Case Name Status Exec Time Memory
example_00.txt AC 6 ms 3504 KiB
example_01.txt AC 2 ms 3492 KiB
example_02.txt AC 3 ms 3516 KiB
example_03.txt AC 3 ms 3504 KiB
hand_00.txt AC 5 ms 3464 KiB
hand_01.txt AC 17 ms 4388 KiB
hand_02.txt AC 10 ms 4416 KiB
hand_03.txt AC 14 ms 4284 KiB
hand_04.txt AC 2 ms 3484 KiB
hand_05.txt AC 3 ms 3480 KiB
hand_06.txt AC 2 ms 3500 KiB
hand_07.txt AC 2 ms 3492 KiB
random2_00.txt AC 3 ms 3500 KiB
random2_01.txt AC 2 ms 3492 KiB
random2_02.txt AC 2 ms 3588 KiB
random2_03.txt AC 2 ms 3548 KiB
random2_04.txt AC 3 ms 3488 KiB
random2_05.txt AC 2 ms 3420 KiB
random2_06.txt AC 2 ms 3604 KiB
random2_07.txt AC 2 ms 3596 KiB
random2_08.txt AC 2 ms 3580 KiB
random2_09.txt AC 2 ms 3452 KiB
random_00.txt AC 3 ms 3500 KiB
random_01.txt AC 2 ms 3532 KiB
random_02.txt AC 2 ms 3492 KiB
random_03.txt AC 2 ms 3484 KiB
random_04.txt AC 4 ms 3588 KiB
random_05.txt AC 2 ms 3484 KiB
random_06.txt AC 2 ms 3392 KiB
random_07.txt AC 2 ms 3452 KiB
random_08.txt AC 2 ms 3540 KiB
random_09.txt AC 3 ms 3520 KiB