Submission #2198324
Source Code Expand
#include"bits/stdc++.h" using namespace std; const long long MOD = (long long)1e9 + 7; vector<int> sq(26, -1); vector<int> sq2bit(25); bool isOK(int board, int sq) { //小さい順に見ているという前提のもとでboard状態のときにiに置けるかどうか //置かれている if (board & sq2bit[sq]) { return false; } if (5 <= sq && sq < 20) { //上下端の行ではない場合,上下の片方にだけ置かれているとダメ bool up = board & sq2bit[sq - 5]; bool down = board & sq2bit[sq + 5]; if ((up && !down) || (!up && down)) { return false; } } if ((sq % 5 != 0) && (sq % 5 != 4)) { //左右端の列ではない場合,左右の片方にだけ置かれているとダメ bool left = board & sq2bit[sq - 1]; bool right = board & sq2bit[sq + 1]; if ((left && !right) || (!left && right)) { return false; } } return true; } vector<int> memo(1 << 25, -1); int solve(int board, int num) { //boardが盤面の状態, numが今見ている数字 if (memo[board] != -1) { return memo[board]; } if (num == 26) { return 1; } //位置が指定されているか if (sq[num] != -1) { return memo[board] = (isOK(board, sq[num]) ? solve(board | sq2bit[sq[num]], num + 1) : 0); } //指定されていない int ok_num = 0; for (int sq = 0; sq < 25; sq++) { if (isOK(board, sq)) { ok_num += solve(board | sq2bit[sq], num + 1); ok_num %= MOD; } } return memo[board] = ok_num; } int main() { for (int i = 0; i < 25; i++) { int x; cin >> x; sq[x] = i; } for (int i = 0; i < 25; i++) { sq2bit[i] = (1 << i); } cout << solve(0, 1) << endl; }
Submission Info
Submission Time | |
---|---|
Task | D - 25個の整数 |
User | tokumini |
Language | C++14 (GCC 5.4.1) |
Score | 100 |
Code Size | 1957 Byte |
Status | AC |
Exec Time | 366 ms |
Memory | 131328 KB |
Judge Result
Set Name | Sample | Subtask1 | Subtask2 | ||||||
---|---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 30 / 30 | 70 / 70 | ||||||
Status |
|
|
|
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 | 153 ms | 131328 KB |
sample-03.txt | AC | 39 ms | 131328 KB |
sample-04.txt | AC | 39 ms | 131328 KB |
test-1-01.txt | AC | 39 ms | 131328 KB |
test-1-02.txt | AC | 39 ms | 131328 KB |
test-1-03.txt | AC | 40 ms | 131328 KB |
test-1-04.txt | AC | 40 ms | 131328 KB |
test-1-05.txt | AC | 39 ms | 131328 KB |
test-1-06.txt | AC | 40 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 | 40 ms | 131328 KB |
test-1-11.txt | AC | 39 ms | 131328 KB |
test-1-12.txt | AC | 40 ms | 131328 KB |
test-1-13.txt | AC | 39 ms | 131328 KB |
test-1-14.txt | AC | 40 ms | 131328 KB |
test-1-15.txt | AC | 40 ms | 131328 KB |
test-2-01.txt | AC | 49 ms | 131328 KB |
test-2-02.txt | AC | 71 ms | 131328 KB |
test-2-03.txt | AC | 40 ms | 131328 KB |
test-2-04.txt | AC | 46 ms | 131328 KB |
test-2-05.txt | AC | 133 ms | 131328 KB |
test-2-06.txt | AC | 366 ms | 131328 KB |
test-2-07.txt | AC | 124 ms | 131328 KB |
test-2-08.txt | AC | 224 ms | 131328 KB |
test-2-09.txt | AC | 353 ms | 131328 KB |
test-2-10.txt | AC | 329 ms | 131328 KB |