QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#560934 | #5810. Doubly-sorted Grid | zhouyuhang | 10 | 46ms | 7140kb | C++14 | 1.8kb | 2024-09-12 19:01:24 | 2024-09-12 19:01:24 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const int N = 15, M = 2e5, P = 1e4 + 7;
void inc(short &x, short y) { if ((x += y) >= P) x -= P;}
int T, n, m;
char g[N][N];
int pos[26][N];
vector<vector<int>> S;
int idx = 0;
vector<int> a;
void dfs(int k) {
if (k > n) {
S.push_back(a);
return;
}
for (int i = a[k - 1]; ~i; --i) a[k] = i, dfs(k + 1);
}
int f[2][M], p[N][M];
int main() {
cin >> T;
for (int t = 1; t <= T; ++t) {
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
cin >> g[i][j];
if (g[i][j] >= 'a' && g[i][j] <= 'z') {
pos[g[i][j] - 'a'][i] = max(pos[g[i][j] - 'a'][i], j);
}
}
}
a.resize(n + 1), a[0] = m;
dfs(1);
reverse(S.begin(), S.end());
for (int i = 1; i <= n; ++i) {
for (int j = 0, k = 0; j < S.size(); ++j) {
vector<int> x = S[j];
if (x[i - 1] >= x[i] + 1) {
x[i]++;
while (S[k] < x) ++k;
p[i][j] = k;
}
}
}
memset(f, 0, sizeof f), f[0][0] = 1;
for (int c = 0; c < 26; ++c) {
for (int i = 1; i <= n; ++i) {
for (int j = 0; j < S.size(); ++j) {
vector<int> x = S[j];
if (x[i - 1] >= x[i] + 1 && (g[i][x[i] + 1] == c + 'a' || g[i][x[i] + 1] == '.')) {
f[c & 1][p[i][j]] += f[c & 1][j];
}
}
}
memcpy(f[(c & 1) ^ 1], f[c & 1], sizeof f[(c & 1) ^ 1]);
for (int j = 0; j < S.size(); ++j) {
vector<int> x = S[j];
int flg = 1;
for (int i = 1; i <= n; ++i) flg &= (pos[c][i] <= x[i]);
if (!flg) f[(c & 1) ^ 1][j] = 0;
else f[(c & 1) ^ 1][j] %= P;
}
}
cout << "Case #" << t << ": " << f[0][S.size() - 1] << endl;
vector<vector<int>>().swap(S);
idx = 0;
memset(pos, 0, sizeof pos);
}
return 0;
}
/*
1
2 2
ad
c.
*/
详细
Subtask #1:
score: 10
Accepted
Test #1:
score: 10
Accepted
time: 46ms
memory: 7140kb
input:
40 4 4 .... .... .... .... 4 4 abcd bcde cdef defg 4 4 bbcc ccde cdef deef 4 4 .... .... .r.. ..e. 3 4 .... .... ...g 1 3 f.. 2 2 .b bb 2 3 ... ..f 4 4 .... .... ..t. ..d. 3 3 .gn ... ... 4 4 ...a ...b ...c ...d 4 4 ...b ..bb .bbb bbbb 4 4 a... .b.. ..c. ...d 3 3 c.. glw ..w 1 4 .... 1 3 d.v 4 2 .. ...
output:
Case #1: 7285 Case #2: 1 Case #3: 1 Case #4: 0 Case #5: 718 Case #6: 231 Case #7: 2 Case #8: 686 Case #9: 0 Case #10: 3500 Case #11: 330 Case #12: 14 Case #13: 4096 Case #14: 2756 Case #15: 3737 Case #16: 19 Case #17: 8175 Case #18: 3737 Case #19: 7279 Case #20: 256 Case #21: 23 Case #22: 7569 Case ...
result:
ok 40 lines
Subtask #2:
score: 0
Time Limit Exceeded
Test #2:
score: 0
Time Limit Exceeded
input:
40 5 10 .......... .......... .......... .......... .......... 10 10 ....a..... ....c..... ....g..... ....j..... ....l..... ....m..... ....n..... ....q..... ....t..... ....v..... 10 10 .......... .......... .......... .......... .......... .......... .......... .......... ...ok..... .......... 9 10 ...
output:
Case #1: 8791 Case #2: 7220 Case #3: 0 Case #4: 2510 Case #5: 4299 Case #6: 1663 Case #7: 981 Case #8: 1430 Case #9: 8814 Case #10: 2877 Case #11: 2124 Case #12: 0 Case #13: 4311 Case #14: 4458 Case #15: 8699 Case #16: 3727 Case #17: 14 Case #18: 5478 Case #19: 7922 Case #20: 6789 Case #21: 1252 Cas...