Submission #4555200


Source Code Expand

#include <bits/stdc++.h>
#define rep(i, n) for (rint i = 1; i <= (n); i ++)
#define re0(i, n) for (rint i = 0; i < (int) n; i ++)
#define travel(i, u) for (rint i = head[u]; i; i = e[i].nxt)
#define rint register int
using namespace std;
   
typedef long long lo;

template<typename tp> inline void read(tp &x) {
    x = 0; char c = getchar(); int f = 0;
    for (; c < '0' || c > '9'; f |= c == '-', c = getchar());
    for (; c >= '0' && c <= '9'; x = (x << 3) + (x << 1) + c - '0', c = getchar());
    if (f) x = -x;
}

namespace {
    const int mo = 1e9 + 7;
    inline int add(int x) {return x >= mo ? x - mo : x;}
    inline int sub(int x) {return x < 0 ? x + mo : x;}
    inline int mul(int x, int y) {return (long long) x * y % mo;}
    inline int power(int a, int k = mo - 2) {
	int ans = 1;
	for (; k; k >>= 1, a = mul(a, a))
	    if (k & 1) ans = mul(ans, a);
	return ans;
    }
}

namespace G {
    vector <int> pre;
    int n;
    inline void init(int _n) {
	n = _n;
	pre.resize(n + 1);
	rep (i, n) pre[i] = i;
    }
    inline int find(int x) {
	return pre[x] == x ? x : pre[x] = find(pre[x]);
    }
    inline void make(int x, int y) {
	assert(x <= n); assert(y <= n);
	pre[find(x)] = find(y);
    }
}
const int N = 233;
int n, m;
char s[N][N];

int main(void) {
    read(n); read(m);
    G::init(n / 2 + m / 2);
    rep (i, n) scanf("%s", s[i] + 1);
    int ans = 1;
    if (n & 1) {
	for (int j = 1; j <= m / 2; j++)
	    if (s[n / 2 + 1][j] != s[n / 2 + 1][m + 1 - j]) {
		ans = mul(ans, 2);
		break;
	    }
    }
    if (m & 1) {
	for (int i = 1; i <= n / 2; i++)
	    if (s[i][m / 2 + 1] != s[n + 1 - i][m / 2 + 1]) {
		ans = mul(ans, 2);
		break;
	    }
    }
    for (int i = 1; i <= n / 2; i++)
	for (int j = 1; j <= m / 2; j++) {
	    int a[] = {s[i][j], s[n - i + 1][j], s[n - i + 1][m - j + 1], s[i][m - j + 1]};
	    sort(a, a + 4);
	    int cnt = 0;
	    do {
		++cnt;
	    } while (next_permutation(a, a + 4));
	    cnt == 24 ? G::make(i, j + n / 2), ans = mul(ans, 12) : ans = mul(ans, cnt);
	}
    int o = n / 2 + m / 2;
    rep (i, n / 2 + m / 2) o -= G::find(i) == i;
    ans = mul(ans, power(2, o));
    cout << ans << "\n";
}

Submission Info

Submission Time
Task I - Reverse Grid
User foreverpiano
Language C++14 (GCC 5.4.1)
Score 1900
Code Size 2244 Byte
Status AC
Exec Time 3 ms
Memory 256 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:53:37: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
     rep (i, n) scanf("%s", s[i] + 1);
                                     ^

Judge Result

Set Name sample all
Score / Max Score 0 / 0 1900 / 1900
Status
AC × 2
AC × 39
Set Name Test Cases
sample sample-01.txt, sample-02.txt
all sample-01.txt, sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, 01-31.txt, 01-32.txt, 01-33.txt, 01-34.txt, 01-35.txt, sample-01.txt, sample-02.txt
Case Name Status Exec Time Memory
01-01.txt AC 1 ms 256 KB
01-02.txt AC 1 ms 256 KB
01-03.txt AC 1 ms 256 KB
01-04.txt AC 1 ms 256 KB
01-05.txt AC 1 ms 256 KB
01-06.txt AC 1 ms 256 KB
01-07.txt AC 1 ms 256 KB
01-08.txt AC 1 ms 256 KB
01-09.txt AC 1 ms 256 KB
01-10.txt AC 2 ms 256 KB
01-11.txt AC 2 ms 256 KB
01-12.txt AC 2 ms 256 KB
01-13.txt AC 2 ms 256 KB
01-14.txt AC 2 ms 256 KB
01-15.txt AC 2 ms 256 KB
01-16.txt AC 2 ms 256 KB
01-17.txt AC 2 ms 256 KB
01-18.txt AC 2 ms 256 KB
01-19.txt AC 2 ms 256 KB
01-20.txt AC 2 ms 256 KB
01-21.txt AC 2 ms 256 KB
01-22.txt AC 1 ms 256 KB
01-23.txt AC 2 ms 256 KB
01-24.txt AC 2 ms 256 KB
01-25.txt AC 2 ms 256 KB
01-26.txt AC 2 ms 256 KB
01-27.txt AC 1 ms 256 KB
01-28.txt AC 2 ms 256 KB
01-29.txt AC 1 ms 256 KB
01-30.txt AC 2 ms 256 KB
01-31.txt AC 2 ms 256 KB
01-32.txt AC 2 ms 256 KB
01-33.txt AC 2 ms 256 KB
01-34.txt AC 2 ms 256 KB
01-35.txt AC 3 ms 256 KB
sample-01.txt AC 1 ms 256 KB
sample-02.txt AC 1 ms 256 KB