Submission #1291196


Source Code Expand

#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <map>
#include <math.h>
#include <numeric>
#include <queue>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <time.h>
#include <unordered_map>
#include <vector>

using namespace std;
#define MOD 1000000007

bool B[26];
int T[1 << 25];
int mp[26];

int bit_count(int 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);
    return (i & 0x0000ffff) + (i >> 16 & 0x0000ffff);
}

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

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

int dfs_count(int state) {
    if (T[state] != -1)
        return T[state];
    int c = bit_count(state);
    if (B[c]) {
        int j = mp[c];
        if (!has_i(state, j)) {
            T[state] = 0;
            return 0;
        }
        int x = j % 5;
        int y = j / 5;
        if (0 < x && x < 4 && (has_i(state, j + 1) ^ (has_i(state, j - 1)))) {
            T[state] = 0;
            return 0;
        }
        if (0 < y && y < 4 && (has_i(state, j + 5) ^ (has_i(state, j - 5)))) {
            T[state] = 0;
            return 0;
        }
        int res = dfs_count(minus_i(state, j));
        T[state] = res;
        return res;
    } else {
        int sum = 0;
        for (int j = 0; j < 25; j++) {
            if (!has_i(state, j)) {
                continue;
            }
            int x = j % 5;
            int y = j / 5;
            if (0 < x && x < 4 &&
                (has_i(state, j + 1) ^ (has_i(state, j - 1)))) {
                continue;
            }
            if (0 < y && y < 4 &&
                (has_i(state, j + 5) ^ (has_i(state, j - 5)))) {
                continue;
            }
            sum += dfs_count(minus_i(state, j));
            sum %= MOD;
        }
        T[state] = sum;
        return sum;
    }
}

int main() {
    for (int i = 0; i < (1 << 25); i++) {
        T[i] = -1;
    }
    for (int i = 0; i < 25; i++) {
        int c;
        cin >> c;
        if (c != 0) {
            B[c] = true;
            mp[c] = i;
        }
    }
    T[0] = 1;
    cout << dfs_count((1 << 25) - 1) << endl;
    return 0;
}

Submission Info

Submission Time
Task D - 25個の整数
User mban
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2495 Byte
Status AC
Exec Time 487 ms
Memory 131328 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 39 ms 131328 KB
sample-02.txt AC 39 ms 131328 KB
sample-03.txt AC 43 ms 131328 KB
sample-04.txt AC 39 ms 131328 KB
test-1-01.txt AC 40 ms 131328 KB
test-1-02.txt AC 39 ms 131328 KB
test-1-03.txt AC 39 ms 131328 KB
test-1-04.txt AC 39 ms 131328 KB
test-1-05.txt AC 40 ms 131328 KB
test-1-06.txt AC 39 ms 131328 KB
test-1-07.txt AC 39 ms 131328 KB
test-1-08.txt AC 40 ms 131328 KB
test-1-09.txt AC 39 ms 131328 KB
test-1-10.txt AC 39 ms 131328 KB
test-1-11.txt AC 39 ms 131328 KB
test-1-12.txt AC 39 ms 131328 KB
test-1-13.txt AC 39 ms 131328 KB
test-1-14.txt AC 39 ms 131328 KB
test-1-15.txt AC 39 ms 131328 KB
test-2-01.txt AC 46 ms 131328 KB
test-2-02.txt AC 40 ms 131328 KB
test-2-03.txt AC 42 ms 131328 KB
test-2-04.txt AC 63 ms 131328 KB
test-2-05.txt AC 41 ms 131328 KB
test-2-06.txt AC 146 ms 131328 KB
test-2-07.txt AC 487 ms 131328 KB
test-2-08.txt AC 209 ms 131328 KB
test-2-09.txt AC 175 ms 131328 KB
test-2-10.txt AC 152 ms 131328 KB