Submission #1291193


Source Code Expand

using System;
using System.Collections.Generic;
using System.Linq;

static class Program
{
    static void Main()
    {
        new Magatro().Solve();
    }
}

class Magatro
{
    private bool[] B = new bool[26];
    private int[] Map = new int[26];
    private int[] T = new int[1 << 25];
    const int Mod = 1000000007;

    private void Scan()
    {
        for (int i = 0; i < 5; i++)
        {
            var line = Console.ReadLine().Split(' ');
            for (int j = 0; j < 5; j++)
            {
                int k = int.Parse(line[j]);
                if (k != 0)
                {
                    B[k] = true;
                    Map[k] = i * 5 + j;
                }
            }
        }
    }

    private int Bit(long i)
    {
        i = (i & 0x55555555) + (i >> 1 & 0x55555555);
        i = (i & 0x33333333) + (i >> 2 & 0x33333333);
        i = (i & 0x0f0f0f0f) + (i >> 4 & 0x0f0f0f0f);
        i = (i & 0x00ff00ff) + (i >> 8 & 0x00ff00ff);
        i = (i & 0x0000ffff) + (i >> 16 & 0x0000ffff);
        return (int)i;
    }

    private bool Calc(int state, int i)
    {
        int pos = 1 << i;
        return (state & pos) > 0;
    }

    private int Minus(int state, int i)
    {
        int pos = 1 << i;
        return state - pos;
    }

    private int DFS(int state)
    {
        if (T[state] != -1)
        {
            return T[state];
        }
        int c = Bit(state);
        if (B[c])
        {
            int j = Map[c];
            if (!Calc(state, j))
            {
                T[state] = 0;
                return 0;
            }
            int x = j % 5;
            int y = j / 5;
            if (0 < x && x < 4 && (Calc(state, j + 1) ^ (Calc(state, j - 1))))
            {
                T[state] = 0;
                return 0;
            }
            if (0 < y && y < 4 && (Calc(state, j + 5) ^ (Calc(state, j - 5))))
            {
                T[state] = 0;
                return 0;
            }

            int res = DFS(Minus(state, j));
            T[state] = res;
            return res;
        }
        else
        {
            int sum = 0;
            for (int j = 0; j < 25; j++)
            {
                if (!Calc(state, j))
                {
                    continue;
                }
                int x = j % 5;
                int y = j / 5;
                if (0 < x && x < 4 && (Calc(state, j + 1) ^ (Calc(state, j - 1))))
                {
                    continue;
                }
                if (0 < y && y < 4 && (Calc(state, j + 5) ^ (Calc(state, j - 5))))
                {
                    continue;
                }

                sum += DFS(Minus(state, j));
                sum %= Mod;
            }
            T[state] = sum;
            return sum;
        }
    }

    public void Solve()
    {
        Scan();
        for(int i = 0; i < (1 << 25); i++)
        {
            T[i] = -1;
        }
        T[0] = 1;
        Console.WriteLine(DFS((1 << 25) - 1));
    }
}

Submission Info

Submission Time
Task D - 25個の整数
User mban
Language C# (Mono 4.6.2.0)
Score 100
Code Size 3131 Byte
Status AC
Exec Time 766 ms
Memory 142048 KB

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 30 / 30 70 / 70
Status
AC × 4
AC × 19
AC × 29
Set Name Test Cases
Sample sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt
Subtask1 sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, test-1-01.txt, test-1-02.txt, test-1-03.txt, test-1-04.txt, test-1-05.txt, test-1-06.txt, test-1-07.txt, test-1-08.txt, test-1-09.txt, test-1-10.txt, test-1-11.txt, test-1-12.txt, test-1-13.txt, test-1-14.txt, test-1-15.txt
Subtask2 sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, test-1-01.txt, test-1-02.txt, test-1-03.txt, test-1-04.txt, test-1-05.txt, test-1-06.txt, test-1-07.txt, test-1-08.txt, test-1-09.txt, test-1-10.txt, test-1-11.txt, test-1-12.txt, test-1-13.txt, test-1-14.txt, test-1-15.txt, test-2-01.txt, test-2-02.txt, test-2-03.txt, test-2-04.txt, test-2-05.txt, test-2-06.txt, test-2-07.txt, test-2-08.txt, test-2-09.txt, test-2-10.txt
Case Name Status Exec Time Memory
sample-01.txt AC 70 ms 140000 KB
sample-02.txt AC 70 ms 140000 KB
sample-03.txt AC 76 ms 140000 KB
sample-04.txt AC 70 ms 140000 KB
test-1-01.txt AC 75 ms 140000 KB
test-1-02.txt AC 70 ms 142048 KB
test-1-03.txt AC 70 ms 140000 KB
test-1-04.txt AC 70 ms 140000 KB
test-1-05.txt AC 71 ms 140000 KB
test-1-06.txt AC 70 ms 142048 KB
test-1-07.txt AC 70 ms 142048 KB
test-1-08.txt AC 71 ms 140000 KB
test-1-09.txt AC 71 ms 142048 KB
test-1-10.txt AC 70 ms 140000 KB
test-1-11.txt AC 70 ms 140000 KB
test-1-12.txt AC 70 ms 142048 KB
test-1-13.txt AC 70 ms 140000 KB
test-1-14.txt AC 70 ms 142048 KB
test-1-15.txt AC 70 ms 142048 KB
test-2-01.txt AC 81 ms 140000 KB
test-2-02.txt AC 71 ms 142048 KB
test-2-03.txt AC 77 ms 140000 KB
test-2-04.txt AC 111 ms 142048 KB
test-2-05.txt AC 74 ms 142048 KB
test-2-06.txt AC 226 ms 140000 KB
test-2-07.txt AC 766 ms 140000 KB
test-2-08.txt AC 337 ms 140000 KB
test-2-09.txt AC 283 ms 140000 KB
test-2-10.txt AC 251 ms 142048 KB