Submission #1833285
Source Code Expand
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
#define rep(i, a, b) for (int i = (a), _ = (b); i <= _; ++ i)
#define per(i, a, b) for (int i = (a), _ = (b); i >= _; -- i)
#define For(i, a, b) for (int i = (a), _ = (b); i < _; ++ i)
#define ri rd<int>
#define rl rd<LL>
typedef long long LL;
using namespace std;
const int maxN = 1e3 + 7;
const int mod = 1e9 + 7;
inline int pls(int x, int y) {return (x + y) % mod;}
inline int mns(int x, int y) {return pls(x, mod - y);}
inline int mul(int x, int y) {return 1LL * x * y % mod;}
inline void Add(int &x, int y) {x = pls(x, y);}
inline void Mul(int &x, int y) {x = mul(x, y);}
inline void Minus(int &x, int y) {x = mns(x, y);}
inline int pwr(int x, LL tms) {int res = 1; for (; tms > 0; tms >>= 1, Mul(x, x)) if (tms & 1) Mul(res, x); return res;}
template<class T> inline T rd() {
bool f = 1; char c = getchar(); for (; !isdigit(c); c = getchar()) if (c == '-') f = 0;
T x = 0; for (; isdigit(c); c = getchar()) x = x * 10 + c - 48; return f ? x : -x;
}
int n, m; LL T;
int A, B, C;
char s[maxN][maxN], t[maxN][maxN];
struct Mat {
int a[2][2];
inline void clear(int d = 0) {
memset(a, 0, sizeof a);
if (d) rep (i, 0, 1) a[i][i] = d;
}
inline Mat operator * (const Mat &v) {
Mat res; res.clear();
rep (i, 0, 1) rep (k, 0, 1) rep (j, 0, 1) Add(res.a[i][j], mul(a[i][k], v.a[k][j]));
return res;
}
friend Mat pwr(Mat x, LL tms) {
Mat res; res.clear(1);
for (; tms > 0; tms >>= 1, x = x * x)
if (tms & 1) res = res * x;
return res;
}
inline int* operator [] (int x) {return a[x];}
}a, trans;
int main() {
n = ri(), m = ri(), T = rl();
if (T == 0 || T == 1) {puts("1"); return 0;}
rep (i, 1, n) scanf("%s", s[i]+1);
rep (i, 1, n) rep (j, 1, m) if (s[i][j] == '#') ++ B;
bool h = 0, w = 0;
rep (i, 1, m) h |= (s[1][i] == '#' && s[n][i] == '#');
rep (i, 1, n) w |= (s[i][1] == '#' && s[i][m] == '#');
if (h && w) puts("1");
else if (!h && !w) printf("%d\n", pwr(B, T-1));
else {
if (h) {
rep (i, 1, n) rep (j, 1, m) t[i][j] = s[i][j];
rep (i, 1, n) rep (j, 1, m) s[j][i] = t[i][j];
swap(n, m);
}
rep (i, 1, n) For (j, 1, m) if (s[i][j] == '#' && s[i][j+1] == '#') ++ A;
rep (i, 1, n) if (s[i][1] == '#' && s[i][m] == '#') ++ C;
a.clear(), trans.clear();
a[0][0] = a[1][0] = 1;
trans[0][0] = B, trans[0][1] = mns(0, A);
trans[1][0] = 0, trans[1][1] = C;
a = pwr(trans, T-1) * a;
printf("%d\n", a[0][0]);
}
return 0;
}
Submission Info
Submission Time |
|
Task |
F - Fraction of Fractal |
User |
acha |
Language |
C++14 (GCC 5.4.1) |
Score |
1700 |
Code Size |
2599 Byte |
Status |
AC |
Exec Time |
8 ms |
Memory |
2176 KB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:63:35: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
rep (i, 1, n) scanf("%s", s[i]+1);
^
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
1700 / 1700 |
Status |
|
|
Set Name |
Test Cases |
Sample |
s1.txt, s2.txt, s3.txt |
All |
01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, 41.txt, 42.txt, 43.txt, 44.txt, s1.txt, s2.txt, s3.txt |
Case Name |
Status |
Exec Time |
Memory |
01.txt |
AC |
4 ms |
1152 KB |
02.txt |
AC |
5 ms |
1152 KB |
03.txt |
AC |
8 ms |
2176 KB |
04.txt |
AC |
5 ms |
1152 KB |
05.txt |
AC |
8 ms |
2176 KB |
06.txt |
AC |
4 ms |
1152 KB |
07.txt |
AC |
4 ms |
1152 KB |
08.txt |
AC |
4 ms |
1152 KB |
09.txt |
AC |
5 ms |
1152 KB |
10.txt |
AC |
8 ms |
2176 KB |
11.txt |
AC |
4 ms |
1152 KB |
12.txt |
AC |
5 ms |
1152 KB |
13.txt |
AC |
5 ms |
1152 KB |
14.txt |
AC |
4 ms |
1152 KB |
15.txt |
AC |
4 ms |
1152 KB |
16.txt |
AC |
4 ms |
1152 KB |
17.txt |
AC |
7 ms |
1152 KB |
18.txt |
AC |
5 ms |
1152 KB |
19.txt |
AC |
5 ms |
1152 KB |
20.txt |
AC |
8 ms |
2176 KB |
21.txt |
AC |
8 ms |
2176 KB |
22.txt |
AC |
4 ms |
1152 KB |
23.txt |
AC |
8 ms |
2176 KB |
24.txt |
AC |
8 ms |
2176 KB |
25.txt |
AC |
8 ms |
2176 KB |
26.txt |
AC |
5 ms |
1152 KB |
27.txt |
AC |
8 ms |
2176 KB |
28.txt |
AC |
5 ms |
1152 KB |
29.txt |
AC |
0 ms |
128 KB |
30.txt |
AC |
0 ms |
128 KB |
31.txt |
AC |
1 ms |
128 KB |
32.txt |
AC |
1 ms |
128 KB |
33.txt |
AC |
0 ms |
128 KB |
34.txt |
AC |
0 ms |
128 KB |
35.txt |
AC |
1 ms |
128 KB |
36.txt |
AC |
1 ms |
128 KB |
37.txt |
AC |
1 ms |
128 KB |
38.txt |
AC |
1 ms |
128 KB |
39.txt |
AC |
1 ms |
128 KB |
40.txt |
AC |
1 ms |
128 KB |
41.txt |
AC |
1 ms |
128 KB |
42.txt |
AC |
0 ms |
128 KB |
43.txt |
AC |
0 ms |
128 KB |
44.txt |
AC |
0 ms |
128 KB |
s1.txt |
AC |
1 ms |
128 KB |
s2.txt |
AC |
1 ms |
128 KB |
s3.txt |
AC |
1 ms |
128 KB |