Submission #36091059


Source Code Expand

import std;

enum long N = 10;
enum long M = 3;
enum long T = N * N;

long[N][N] board;
auto candies = new long[](M+1);

long[] dx = [-1, 0, 1, 0];
long[] dy = [0, 1, 0, -1];

dchar[] dirs = ['F', 'B', 'L', 'R'];

struct Coord {
    long x, y;
}

long[N][] moveBox(dchar dir) {
    auto ret = board.dup;

    if (dir == 'L') {
        foreach (i; 0 .. N) {
            long k;

            foreach (j; 0 .. N) {
                if (ret[i][j] != 0) {
                    ret[i][k] = ret[i][j];
                    if (k != j) {
                        ret[i][j] = 0;
                    }
                    ++k;
                }
            }
        }
    }
    else if (dir == 'R') {
        foreach (i; 0 .. N) {
            long k = N - 1;

            foreach_reverse (j; 0 .. N) {
                if (ret[i][j] != 0) {
                    ret[i][k] = ret[i][j];
                    if (k != j) {
                        ret[i][j] = 0;
                    }
                    --k;
                }
            }
        }
    }
    else if (dir == 'F') {
        foreach (j; 0 .. N) {
            long k;

            foreach (i; 0 .. N) {
                if (ret[i][j] != 0) {
                    ret[k][j] = ret[i][j];
                    if (k != i) {
                        ret[i][j] = 0;
                    }
                    ++k;
                }
            }
        }
    }
    else {
        foreach (j; 0 .. N) {
            long k = N - 1;

            foreach_reverse (i; 0 .. N) {
                if (ret[i][j] != 0) {
                    ret[k][j] = ret[i][j];
                    if (k != i) {
                        ret[i][j] = 0;
                    }
                    --k;
                }
            }
        }
    }

    return ret;
}

Coord findCoordToPut(long[N][] mat, long num) {
    Coord ret;
    long cnt;

    foreach (i; 0 .. N) {
        foreach (j; 0 .. N) {
            if (mat[i][j] == 0) ++cnt;

            if (cnt >= num) ret.x = i, ret.y = j;
        }
    }

    return ret;
}

long computeScore(long[N][] mat) {
    auto visited = new bool[][](N, N);
    long cnt;

    foreach (i; 0 .. N) {
        foreach (j; 0 .. N) {
            if (!visited[i][j] && mat[i][j] != 0) {
                visited[i][j] = true;
                long size = 1;
                Coord[] stack = [Coord(i, j)];

                while (!stack.empty) {
                    auto f = stack.front;
                    stack.popFront;

                    foreach (k; 0 .. 4) {
                        long nx = f.x + dx[k], ny = f.y + dy[k];

                        if (0 <= nx && nx < N && 0 <= ny && ny < N && !visited[nx][ny] && mat[nx][ny] == mat[i][j]) {
                            visited[nx][ny] = true;
                            ++size;
                            stack ~= Coord(nx, ny);
                        }
                    }
                }

                cnt += size * size;
            }
        }
    }

    long ret = round((1e6 * cnt) / candies.map!(a => a * a).sum).to!long;
    return ret;
}

dchar process(long type, long num) {
    dchar ret;
    long maxScore;
    long[N][] nxt;

    foreach (i, dir; dirs) {
        auto mat = moveBox(dir);

        auto coord = findCoordToPut(mat, num);
        mat[coord.x][coord.y] = type;

        long score = computeScore(mat);
        if (maxScore < score) {
            ret = dir;
            maxScore = score;
            nxt = mat;
        }
    }

    board = nxt;
    return ret;
}

void main() {
    auto f = readln.chomp.split.to!(long[]);

    foreach (c; f) ++candies[c];

    foreach (i; 0 .. T) {
        long p;
        readf("%d\n", p);

        dchar d = process(f[i], p);
        d.writeln;
        stdout.flush;
    }
}

Submission Info

Submission Time
Task A - Halloween Candy
User kokatsu
Language D (DMD 2.091.0)
Score 28809574
Code Size 3924 Byte
Status AC
Exec Time 19 ms
Memory 2108 KiB

Judge Result

Set Name test_ALL
Score / Max Score 28809574 / 200000000
Status
AC × 200
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, test_0150.txt, test_0151.txt, test_0152.txt, test_0153.txt, test_0154.txt, test_0155.txt, test_0156.txt, test_0157.txt, test_0158.txt, test_0159.txt, test_0160.txt, test_0161.txt, test_0162.txt, test_0163.txt, test_0164.txt, test_0165.txt, test_0166.txt, test_0167.txt, test_0168.txt, test_0169.txt, test_0170.txt, test_0171.txt, test_0172.txt, test_0173.txt, test_0174.txt, test_0175.txt, test_0176.txt, test_0177.txt, test_0178.txt, test_0179.txt, test_0180.txt, test_0181.txt, test_0182.txt, test_0183.txt, test_0184.txt, test_0185.txt, test_0186.txt, test_0187.txt, test_0188.txt, test_0189.txt, test_0190.txt, test_0191.txt, test_0192.txt, test_0193.txt, test_0194.txt, test_0195.txt, test_0196.txt, test_0197.txt, test_0198.txt, test_0199.txt
Case Name Status Exec Time Memory
test_0000.txt AC 11 ms 1400 KiB
test_0001.txt AC 13 ms 1812 KiB
test_0002.txt AC 9 ms 1744 KiB
test_0003.txt AC 10 ms 1512 KiB
test_0004.txt AC 14 ms 1756 KiB
test_0005.txt AC 9 ms 1548 KiB
test_0006.txt AC 9 ms 1712 KiB
test_0007.txt AC 8 ms 1788 KiB
test_0008.txt AC 11 ms 1876 KiB
test_0009.txt AC 12 ms 1704 KiB
test_0010.txt AC 10 ms 1740 KiB
test_0011.txt AC 9 ms 1784 KiB
test_0012.txt AC 6 ms 1552 KiB
test_0013.txt AC 13 ms 1844 KiB
test_0014.txt AC 8 ms 1684 KiB
test_0015.txt AC 10 ms 1768 KiB
test_0016.txt AC 12 ms 1728 KiB
test_0017.txt AC 10 ms 1784 KiB
test_0018.txt AC 11 ms 1712 KiB
test_0019.txt AC 11 ms 1856 KiB
test_0020.txt AC 11 ms 1796 KiB
test_0021.txt AC 10 ms 1768 KiB
test_0022.txt AC 15 ms 1796 KiB
test_0023.txt AC 12 ms 1736 KiB
test_0024.txt AC 10 ms 1668 KiB
test_0025.txt AC 15 ms 2024 KiB
test_0026.txt AC 10 ms 1752 KiB
test_0027.txt AC 10 ms 1852 KiB
test_0028.txt AC 9 ms 1780 KiB
test_0029.txt AC 8 ms 1836 KiB
test_0030.txt AC 10 ms 1700 KiB
test_0031.txt AC 9 ms 1708 KiB
test_0032.txt AC 13 ms 1764 KiB
test_0033.txt AC 10 ms 1732 KiB
test_0034.txt AC 8 ms 1784 KiB
test_0035.txt AC 8 ms 1664 KiB
test_0036.txt AC 10 ms 1728 KiB
test_0037.txt AC 8 ms 1808 KiB
test_0038.txt AC 10 ms 1812 KiB
test_0039.txt AC 11 ms 1688 KiB
test_0040.txt AC 10 ms 1768 KiB
test_0041.txt AC 14 ms 1952 KiB
test_0042.txt AC 12 ms 1732 KiB
test_0043.txt AC 10 ms 1796 KiB
test_0044.txt AC 14 ms 1772 KiB
test_0045.txt AC 11 ms 1712 KiB
test_0046.txt AC 9 ms 1684 KiB
test_0047.txt AC 11 ms 1756 KiB
test_0048.txt AC 17 ms 1768 KiB
test_0049.txt AC 12 ms 1868 KiB
test_0050.txt AC 10 ms 1744 KiB
test_0051.txt AC 11 ms 1720 KiB
test_0052.txt AC 9 ms 1676 KiB
test_0053.txt AC 12 ms 1764 KiB
test_0054.txt AC 12 ms 1704 KiB
test_0055.txt AC 12 ms 1676 KiB
test_0056.txt AC 12 ms 1740 KiB
test_0057.txt AC 11 ms 1812 KiB
test_0058.txt AC 10 ms 1808 KiB
test_0059.txt AC 10 ms 1760 KiB
test_0060.txt AC 11 ms 1812 KiB
test_0061.txt AC 10 ms 1768 KiB
test_0062.txt AC 10 ms 1772 KiB
test_0063.txt AC 8 ms 1692 KiB
test_0064.txt AC 12 ms 1796 KiB
test_0065.txt AC 12 ms 1776 KiB
test_0066.txt AC 10 ms 1760 KiB
test_0067.txt AC 14 ms 1744 KiB
test_0068.txt AC 13 ms 1836 KiB
test_0069.txt AC 12 ms 1684 KiB
test_0070.txt AC 13 ms 1796 KiB
test_0071.txt AC 12 ms 1768 KiB
test_0072.txt AC 9 ms 1668 KiB
test_0073.txt AC 10 ms 1812 KiB
test_0074.txt AC 9 ms 1788 KiB
test_0075.txt AC 9 ms 1936 KiB
test_0076.txt AC 15 ms 1680 KiB
test_0077.txt AC 13 ms 1720 KiB
test_0078.txt AC 11 ms 1716 KiB
test_0079.txt AC 10 ms 1884 KiB
test_0080.txt AC 11 ms 1704 KiB
test_0081.txt AC 10 ms 1668 KiB
test_0082.txt AC 13 ms 1940 KiB
test_0083.txt AC 19 ms 2060 KiB
test_0084.txt AC 9 ms 1784 KiB
test_0085.txt AC 11 ms 1708 KiB
test_0086.txt AC 10 ms 1792 KiB
test_0087.txt AC 9 ms 1728 KiB
test_0088.txt AC 11 ms 1760 KiB
test_0089.txt AC 12 ms 1820 KiB
test_0090.txt AC 12 ms 1684 KiB
test_0091.txt AC 10 ms 1768 KiB
test_0092.txt AC 11 ms 1796 KiB
test_0093.txt AC 8 ms 1808 KiB
test_0094.txt AC 12 ms 1764 KiB
test_0095.txt AC 11 ms 1892 KiB
test_0096.txt AC 12 ms 1900 KiB
test_0097.txt AC 13 ms 1704 KiB
test_0098.txt AC 10 ms 1776 KiB
test_0099.txt AC 12 ms 1740 KiB
test_0100.txt AC 10 ms 1748 KiB
test_0101.txt AC 9 ms 1740 KiB
test_0102.txt AC 8 ms 1704 KiB
test_0103.txt AC 12 ms 1680 KiB
test_0104.txt AC 11 ms 1748 KiB
test_0105.txt AC 17 ms 1676 KiB
test_0106.txt AC 10 ms 1692 KiB
test_0107.txt AC 11 ms 1764 KiB
test_0108.txt AC 16 ms 1784 KiB
test_0109.txt AC 13 ms 1724 KiB
test_0110.txt AC 10 ms 1776 KiB
test_0111.txt AC 12 ms 1788 KiB
test_0112.txt AC 14 ms 1796 KiB
test_0113.txt AC 9 ms 1700 KiB
test_0114.txt AC 12 ms 1852 KiB
test_0115.txt AC 9 ms 1776 KiB
test_0116.txt AC 13 ms 1780 KiB
test_0117.txt AC 9 ms 1656 KiB
test_0118.txt AC 9 ms 1736 KiB
test_0119.txt AC 7 ms 1808 KiB
test_0120.txt AC 13 ms 1936 KiB
test_0121.txt AC 12 ms 1764 KiB
test_0122.txt AC 10 ms 1804 KiB
test_0123.txt AC 9 ms 1660 KiB
test_0124.txt AC 11 ms 1768 KiB
test_0125.txt AC 11 ms 1824 KiB
test_0126.txt AC 8 ms 1736 KiB
test_0127.txt AC 14 ms 1840 KiB
test_0128.txt AC 10 ms 1804 KiB
test_0129.txt AC 9 ms 1700 KiB
test_0130.txt AC 12 ms 1820 KiB
test_0131.txt AC 16 ms 1676 KiB
test_0132.txt AC 9 ms 1804 KiB
test_0133.txt AC 10 ms 1704 KiB
test_0134.txt AC 11 ms 1720 KiB
test_0135.txt AC 10 ms 1788 KiB
test_0136.txt AC 9 ms 1668 KiB
test_0137.txt AC 11 ms 1692 KiB
test_0138.txt AC 11 ms 1808 KiB
test_0139.txt AC 11 ms 1732 KiB
test_0140.txt AC 12 ms 1992 KiB
test_0141.txt AC 9 ms 1812 KiB
test_0142.txt AC 8 ms 1772 KiB
test_0143.txt AC 9 ms 1748 KiB
test_0144.txt AC 13 ms 1852 KiB
test_0145.txt AC 9 ms 1796 KiB
test_0146.txt AC 11 ms 1780 KiB
test_0147.txt AC 12 ms 1876 KiB
test_0148.txt AC 12 ms 1696 KiB
test_0149.txt AC 9 ms 1768 KiB
test_0150.txt AC 9 ms 1724 KiB
test_0151.txt AC 12 ms 1792 KiB
test_0152.txt AC 9 ms 1776 KiB
test_0153.txt AC 12 ms 1820 KiB
test_0154.txt AC 8 ms 1692 KiB
test_0155.txt AC 15 ms 1904 KiB
test_0156.txt AC 8 ms 1792 KiB
test_0157.txt AC 13 ms 1784 KiB
test_0158.txt AC 10 ms 1704 KiB
test_0159.txt AC 9 ms 1804 KiB
test_0160.txt AC 9 ms 1768 KiB
test_0161.txt AC 14 ms 1688 KiB
test_0162.txt AC 12 ms 1792 KiB
test_0163.txt AC 10 ms 1648 KiB
test_0164.txt AC 12 ms 1776 KiB
test_0165.txt AC 8 ms 1760 KiB
test_0166.txt AC 12 ms 1776 KiB
test_0167.txt AC 11 ms 1800 KiB
test_0168.txt AC 8 ms 1804 KiB
test_0169.txt AC 9 ms 1716 KiB
test_0170.txt AC 9 ms 1728 KiB
test_0171.txt AC 10 ms 1668 KiB
test_0172.txt AC 10 ms 1760 KiB
test_0173.txt AC 11 ms 1812 KiB
test_0174.txt AC 15 ms 2108 KiB
test_0175.txt AC 13 ms 1688 KiB
test_0176.txt AC 11 ms 1712 KiB
test_0177.txt AC 11 ms 1732 KiB
test_0178.txt AC 10 ms 1800 KiB
test_0179.txt AC 10 ms 1768 KiB
test_0180.txt AC 9 ms 1792 KiB
test_0181.txt AC 10 ms 1680 KiB
test_0182.txt AC 11 ms 1720 KiB
test_0183.txt AC 9 ms 1804 KiB
test_0184.txt AC 12 ms 1800 KiB
test_0185.txt AC 8 ms 1804 KiB
test_0186.txt AC 8 ms 1700 KiB
test_0187.txt AC 14 ms 1776 KiB
test_0188.txt AC 10 ms 1732 KiB
test_0189.txt AC 11 ms 1908 KiB
test_0190.txt AC 11 ms 1776 KiB
test_0191.txt AC 13 ms 1760 KiB
test_0192.txt AC 12 ms 1724 KiB
test_0193.txt AC 8 ms 1680 KiB
test_0194.txt AC 9 ms 1656 KiB
test_0195.txt AC 10 ms 1864 KiB
test_0196.txt AC 15 ms 1804 KiB
test_0197.txt AC 9 ms 1728 KiB
test_0198.txt AC 10 ms 1708 KiB
test_0199.txt AC 9 ms 1664 KiB