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 |
|
|
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 |