Submission #2787311


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

const int N = 500;
const int Mod = 1e9 + 7;
int n, m, f[N], used[N]; char s[N][N]; vector <int> g[N];

inline int dec(int x) {return x < 0 ? x + Mod : x;}
inline int inc(int x) {return x >= Mod ? x - Mod : x;}

template <class T> inline void in(T &x) {
	x = 0; int f = 1; char ch = getchar();
	for (; ch<'0' || ch>'9';) {if (ch=='-') f=-1; ch = getchar();}
	for (; ch>='0' && ch<='9';) x = x*10 + ch-'0', ch = getchar();
	x *= f;
}

inline int Count(string p) {
	sort(p.begin(), p.end());
	int n = p.size(), res = f[(int)p.size()];
	for (int l = 0, r; l < n; l = r) {
		r = l;
		for (; r < n && p[r] == p[l];) ++r;
		res /= f[r - l];
	}
	return res;
}

inline void dfs(int u) {
	used[u] = 1;
	for (auto v : g[u])
		if (!used[v]) dfs(v);
}

int main() {
	in(n), in(m), f[0] = 1;
	for (int i = 1; i < 5; ++i) f[i] = f[i - 1] * i;
	for (int i = 0; i < n; ++i) scanf("%s", s[i]);

	int ans = 1;
	for (int i = 0; i < n / 2; ++i)
		for (int j = 0; j < m / 2; ++j) {
			string p = "";
			p += s[i][j];
			p += s[n - i - 1][j];
			p += s[i][m - j - 1];
			p += s[n - i - 1][m - j - 1];
			int z = Count(p);
			if (z == 24) {
				z = 12;
				g[i].push_back(n + j);
				g[n + j].push_back(i);
			}
			ans = 1LL * ans * z % Mod;
		}

	if (n & 1) {
		int ok = false;
		for (int i = 0; !ok && i < m / 2; ++i)
			if (s[n / 2][i] != s[n / 2][m - i - 1])
				ok = true, ans = inc(ans << 1);
	}
	if (m & 1) {
		int ok = false;
		for (int i = 0; !ok && i < n / 2; ++i)
			if (s[i][m / 2] != s[n - i - 1][m / 2])
				ok = true, ans = inc(ans << 1);
	}

	int res = n + m;
	for (int i = 0; i < n + m; ++i)
		if (!used[i]) -- res, dfs(i);
	for (int i = 0; i < res; ++i) ans = inc(ans << 1);
	printf("%d\n", ans);
	return 0;
}

Submission Info

Submission Time
Task I - Reverse Grid
User annoyrain
Language C++14 (GCC 5.4.1)
Score 1900
Code Size 1825 Byte
Status AC
Exec Time 5 ms
Memory 512 KB

Compile Error

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

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 384 KB
01-09.txt AC 1 ms 384 KB
01-10.txt AC 4 ms 384 KB
01-11.txt AC 4 ms 384 KB
01-12.txt AC 4 ms 384 KB
01-13.txt AC 4 ms 384 KB
01-14.txt AC 2 ms 256 KB
01-15.txt AC 2 ms 384 KB
01-16.txt AC 4 ms 512 KB
01-17.txt AC 4 ms 512 KB
01-18.txt AC 4 ms 512 KB
01-19.txt AC 4 ms 384 KB
01-20.txt AC 5 ms 384 KB
01-21.txt AC 4 ms 384 KB
01-22.txt AC 1 ms 256 KB
01-23.txt AC 3 ms 384 KB
01-24.txt AC 4 ms 384 KB
01-25.txt AC 4 ms 384 KB
01-26.txt AC 4 ms 512 KB
01-27.txt AC 1 ms 256 KB
01-28.txt AC 2 ms 256 KB
01-29.txt AC 1 ms 384 KB
01-30.txt AC 2 ms 384 KB
01-31.txt AC 4 ms 512 KB
01-32.txt AC 4 ms 512 KB
01-33.txt AC 4 ms 512 KB
01-34.txt AC 4 ms 512 KB
01-35.txt AC 4 ms 512 KB
sample-01.txt AC 1 ms 256 KB
sample-02.txt AC 1 ms 256 KB