Submission #528119
Source Code Expand
/*{{{*/
#include <cassert>
#include <cctype>
#include <climits>
#include <cmath>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <functional>
#include <bitset>
#include <deque>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
typedef int8_t sbyte;
typedef uint8_t byte;
typedef uint16_t ushort;
typedef uint32_t uint;
typedef int64_t i64;
typedef uint64_t u64;
template<class T> static inline T ABS(T x) {return x < 0 ? -x : x;}
template<class T> static inline void MAZ(T &a, const T &b) {if(a < b) a = b;}
template<class T> static inline void MIZ(T &a, const T &b) {if(b < a) a = b;}
/*}}}*/
static i64 Inv(i64 x, i64 m) {//1<=x<m ; GCD(x,m)=1 ; m(m-2)+1 \in long long
return x == 1 ? 1 : ((i64)(x - Inv(m % x, x)) * m + 1) / x;
}
static const auto MOD = 1000000009;
static const auto HMAX = 16;
static const auto WMAX = 16;
static const auto NMAX = HMAX * WMAX;
static int N;
static int A[NMAX][NMAX];
static int solve() {
auto ret = (i64)1;
for(auto i = 0; i < N; i++) {
auto j = i;
for(; j < N && A[j][i] == 0; j++);
if(j == N) return 0;
if(j != i) {
for(auto k = i; k < N; k++) swap(A[i][k], A[j][k]);
ret = MOD - ret;
}
for(j = i + 1; j < N; j++) {
if(A[j][i] == 0) continue;
auto x = A[j][i] * Inv(A[i][i], MOD) % MOD;
for(auto k = i; k < N; k++) {
A[j][k] = (A[j][k] - A[i][k] * x) % MOD;
if(A[j][k] < 0) A[j][k] += MOD;
}
}
}
for(auto i = 0; i < N; i++) ret = ret * A[i][i] % MOD;
return ret;
}
static void input() {
static const int dir[2][2] = {{-1, 0}, {0, -1}};
static char M[HMAX][WMAX + 1];
static int Z[HMAX][WMAX];
int H, W;
scanf("%d%d", &H, &W);
for(auto i = 0; i < H; i++) scanf("%s", M[i]);
for(auto i = 0; i < H; i++) {
for(auto j = 0; j < W; j++) {
if(M[i][j] != 'W') continue;
Z[i][j] = N++;
for(auto k = 0; k < 2; k++) {
auto ii = i, jj = j;
for(; ; ) {
if((ii += dir[k][0]) < 0) break;
if((jj += dir[k][1]) < 0) break;
if(M[ii][jj] == 'W') {
auto a = N - 1, b = Z[ii][jj];
A[a][b] = MOD - 1;
A[a][a]++;
A[b][a] = MOD - 1;
A[b][b]++;
break;
}
}
}
}
}
}
int main() {
input();
N--;
printf("%d\n", solve());
return 0;
}
Submission Info
Submission Time
2015-10-16 17:48:54+0900
Task
G - Ammunition Dumps
User
arosusti
Language
C++11 (GCC 4.8.1)
Score
100
Code Size
2528 Byte
Status
AC
Exec Time
38 ms
Memory
1296 KB
Compile Error
./Main.cpp: In function ‘void input()’:
./Main.cpp:76:23: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &H, &W);
^
./Main.cpp:77:47: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
for(auto i = 0; i < H; i++) scanf("%s", M[i]);
^
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
100 / 100
Status
Set Name
Test Cases
Sample
subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt, subtask0_sample_04.txt
All
subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt, subtask0_sample_04.txt, subtask1_all_01.txt, subtask1_all_02.txt, subtask1_all_03.txt, subtask1_mini_01.txt, subtask1_mini_02.txt, subtask1_mini_03.txt, subtask1_mini_04.txt, subtask1_mini_05.txt, subtask1_mini_06.txt, subtask1_mini_07.txt, subtask1_random_01.txt, subtask1_random_02.txt, subtask1_random_03.txt, subtask1_random_04.txt, subtask1_random_05.txt, subtask1_random_06.txt, subtask1_random_07.txt, subtask1_random_08.txt, subtask1_random_09.txt, subtask1_random_10.txt, subtask1_random_11.txt, subtask1_random_12.txt, subtask1_random_13.txt, subtask1_random_14.txt, subtask1_special_01.txt, subtask1_special_02.txt
Case Name
Status
Exec Time
Memory
subtask0_sample_01.txt
AC
27 ms
1036 KB
subtask0_sample_02.txt
AC
27 ms
1044 KB
subtask0_sample_03.txt
AC
27 ms
1048 KB
subtask0_sample_04.txt
AC
33 ms
1296 KB
subtask1_all_01.txt
AC
32 ms
1256 KB
subtask1_all_02.txt
AC
30 ms
1204 KB
subtask1_all_03.txt
AC
31 ms
1184 KB
subtask1_mini_01.txt
AC
27 ms
1044 KB
subtask1_mini_02.txt
AC
27 ms
1048 KB
subtask1_mini_03.txt
AC
27 ms
1048 KB
subtask1_mini_04.txt
AC
27 ms
1048 KB
subtask1_mini_05.txt
AC
27 ms
1048 KB
subtask1_mini_06.txt
AC
28 ms
1040 KB
subtask1_mini_07.txt
AC
28 ms
1040 KB
subtask1_random_01.txt
AC
35 ms
1200 KB
subtask1_random_02.txt
AC
31 ms
1156 KB
subtask1_random_03.txt
AC
32 ms
1192 KB
subtask1_random_04.txt
AC
33 ms
1188 KB
subtask1_random_05.txt
AC
29 ms
1164 KB
subtask1_random_06.txt
AC
29 ms
1056 KB
subtask1_random_07.txt
AC
32 ms
1148 KB
subtask1_random_08.txt
AC
32 ms
1172 KB
subtask1_random_09.txt
AC
31 ms
1000 KB
subtask1_random_10.txt
AC
33 ms
1028 KB
subtask1_random_11.txt
AC
38 ms
996 KB
subtask1_random_12.txt
AC
29 ms
1072 KB
subtask1_random_13.txt
AC
31 ms
976 KB
subtask1_random_14.txt
AC
29 ms
1044 KB
subtask1_special_01.txt
AC
28 ms
1076 KB
subtask1_special_02.txt
AC
29 ms
1076 KB