Submission #1612078
Source Code Expand
/* #include <bits/stdc++.h> //*/ //* #include <iostream> #include <vector> #include <string.h> #include <stack> #include <queue> #include <algorithm> #include <climits> //*/ #define REP(i,n) for(ll i=0;i<(n);i++) #define MOD 1000000007 #define int long long #ifdef int const long long INF = LLONG_MAX / 10; #else const int INF = 1010101010; #endif using namespace std; typedef long long ll; typedef vector<vector<ll>> mat; typedef pair<int, int> P; //typedef pair<double, double> P; int A[25]; int fix[26]; //既に指定されている数字の場所fix[5]:5が入っている場所インデックス int dp[1<<25]; vector<int> V; signed main() { REP(i,26) fix[i] = -1; REP(i,25) { cin >> A[i]; if (A[i] == 0) V.push_back(i); else fix[A[i]] = i; } dp[0] = 1; //配るDP for (int mask=0; mask<(1<<25)-1; mask++) if (dp[mask]) { int b = __builtin_popcount(mask) + 1; //次に置く数字 if (fix[b] >= 0) { //次に置く数字bの場所が指定されていた場合 int r = fix[b]; int y = r / 5; int x = r % 5; if ((mask & (1 << r)) == 0) { //これから置く場合 if (y > 0 && y < 4 && ((mask >> (r - 5)) ^ (mask >> (r + 5))) & 1) continue; if (x > 0 && x < 4 && ((mask >> (r - 1)) ^ (mask >> (r + 1))) & 1) continue; dp[mask ^ (1 << r)] += dp[mask]; if (dp[mask ^ (1 << r)] >= MOD) dp[mask ^ (1 << r)] -= MOD; } } else { for (int r : V) { int y = r / 5; int x = r % 5; if ((mask & (1 << r)) == 0) { if (y > 0 && y < 4 && ((mask >> (r - 5)) ^ (mask >> (r + 5))) & 1) continue; if (x > 0 && x < 4 && ((mask >> (r - 1)) ^ (mask >> (r + 1))) & 1) continue; dp[mask ^ (1 << r)] += dp[mask]; if (dp[mask ^ (1 << r)] >= MOD) dp[mask ^ (1 << r)] -= MOD; } } } } cout << dp[(1<<25)-1] << endl; }
Submission Info
Submission Time | |
---|---|
Task | D - 25個の整数 |
User | hiyokko3 |
Language | C++14 (GCC 5.4.1) |
Score | 100 |
Code Size | 2191 Byte |
Status | AC |
Exec Time | 139 ms |
Memory | 160512 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 | 28 ms | 14592 KB |
sample-02.txt | AC | 36 ms | 37120 KB |
sample-03.txt | AC | 24 ms | 256 KB |
sample-04.txt | AC | 28 ms | 14592 KB |
test-1-01.txt | AC | 31 ms | 20736 KB |
test-1-02.txt | AC | 29 ms | 18688 KB |
test-1-03.txt | AC | 30 ms | 20736 KB |
test-1-04.txt | AC | 47 ms | 71936 KB |
test-1-05.txt | AC | 29 ms | 18688 KB |
test-1-06.txt | AC | 30 ms | 18688 KB |
test-1-07.txt | AC | 24 ms | 2304 KB |
test-1-08.txt | AC | 42 ms | 51456 KB |
test-1-09.txt | AC | 28 ms | 14592 KB |
test-1-10.txt | AC | 28 ms | 14592 KB |
test-1-11.txt | AC | 28 ms | 14592 KB |
test-1-12.txt | AC | 31 ms | 22784 KB |
test-1-13.txt | AC | 28 ms | 14592 KB |
test-1-14.txt | AC | 30 ms | 20736 KB |
test-1-15.txt | AC | 32 ms | 26880 KB |
test-2-01.txt | AC | 36 ms | 35072 KB |
test-2-02.txt | AC | 37 ms | 41472 KB |
test-2-03.txt | AC | 41 ms | 51456 KB |
test-2-04.txt | AC | 76 ms | 145920 KB |
test-2-05.txt | AC | 80 ms | 140032 KB |
test-2-06.txt | AC | 114 ms | 137856 KB |
test-2-07.txt | AC | 104 ms | 151808 KB |
test-2-08.txt | AC | 121 ms | 160512 KB |
test-2-09.txt | AC | 105 ms | 135936 KB |
test-2-10.txt | AC | 139 ms | 150016 KB |