ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#184795 | #2068. 最长公共前缀 | tkswls | 100 | 40749ms | 204968kb | C++11 | 2.7kb | 2023-09-14 10:03:20 | 2023-09-14 12:06:51 |
answer
#include<bits/stdc++.h>
using namespace std;
const long long mod1 = 998244353, mod2 = 1000000007, base = 29;
int n, m, rr;
int a[2005][2005];
char c;
long long p[2005][2005], pp[2005][2005], q[2005][2005], qq[2005][2005], w[2005][2005], ww[2005][2005], m1[2005], m2[2005];
// p 横 q 竖 w 斜
inline long long valh(int u, int v, int d, int op) {
if (op == 1) {
return ((p[u][v + d - 1] - p[u][v - 1] * m1[d] % mod1) % mod1 + mod1) % mod1;
}
return ((pp[u][v + d - 1] - pp[u][v - 1] * m2[d] % mod2) % mod2 + mod2) % mod2;
}
inline long long vals(int u, int v, int d, int op) {
if (op == 1) {
return ((q[u + d - 1][v] - q[u - 1][v] * m1[d] % mod1) % mod1 + mod1) % mod1;
}
return ((qq[u + d - 1][v] - qq[u - 1][v] * m2[d] % mod2) % mod2 + mod2) % mod2;
}
inline long long valx(int u, int v, int d, int op) {
if (op == 1) {
return ((w[u + d - 1][v + d - 1] - w[u - 1][v - 1] * m1[d] % mod1) % mod1 + mod1) % mod1;
}
return ((ww[u + d - 1][v + d - 1] - ww[u - 1][v - 1] * m2[d] % mod2) % mod2 + mod2) % mod2;
}
inline long long get_val(int u, int v, int d, int op, int opp) {
if (op == 1) return valh(u, v, d, opp);
else if (op == 2) return vals(u, v, d, opp);
return valx(u, v, d, opp);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m >> rr;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> c;
a[i][j] = c - 'a';
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
p[i][j] = (p[i][j - 1] * base + a[i][j]) % mod1;
pp[i][j] = (pp[i][j - 1] * base + a[i][j]) % mod2;
q[i][j] = (q[i - 1][j] * base + a[i][j]) % mod1;
qq[i][j] = (qq[i - 1][j] * base + a[i][j]) % mod2;
w[i][j] = (w[i - 1][j - 1] * base + a[i][j]) % mod1;
ww[i][j] = (ww[i - 1][j - 1] * base + a[i][j]) % mod2;
}
}
m1[0] = m2[0] = 1;
for (int i = 1; i <= 2000; i++) {
m1[i] = m1[i - 1] * 29 % mod1;
m2[i] = m2[i - 1] * 29 % mod2;
}
int x, y, xx, yy, op, opp;
for (int i = 1; i <= rr; i++) {
cin >> x >> y >> c;
int l = 0, r = max(n, m), mid;
if (c == 'H') {
op = 1;
r = min(r, m - y + 1);
} else if (c == 'V') {
op = 2;
r = min(r, n - x + 1);
} else {
op = 3;
r = min(r, min(m - y + 1, n - x + 1));
}
cin >> xx >> yy >> c;
if (c == 'H') {
opp = 1;
r = min(r, m - yy + 1);
} else if (c == 'V') {
opp = 2;
r = min(r, n - xx + 1);
} else {
opp = 3;
r = min(r, min(m - yy + 1, n - xx + 1));
}
while (l < r) {
mid = (l + r + 1) >> 1;
if (get_val(x, y, mid, op, 1) == get_val(xx, yy, mid, opp, 1) && get_val(x, y, mid, op, 0) == get_val(xx, yy, mid, opp, 0)) {
l = mid;
} else {
r = mid - 1;
}
}
cout << l << "\n";
}
return 0;
}
详细
小提示:点击横条可展开更详细的信息
Subtask #1:
score: 11
Accepted
Test #1:
score: 11
Accepted
time: 63ms
memory: 103152kb
input:
1000 2000 10000 awanannwnnaaawwnwawanwnwaaaanwnaaananwawwwwnannannawwwawwaaaaannwnwnwnnaaawaawawannn...
output:
0 0 0 0 0 0 0 2 0 1 0 0 1 0 1 0 2 0 1 2 0 0 2 0 1 1 0 0 0 0 1 0 0 0 1 0 0 1 0 1 1 0 2 0 1 3 1 0 3 0 ...
result:
ok 10000 tokens
Test #2:
score: 0
Accepted
time: 87ms
memory: 158628kb
input:
2000 1000 10000 zzqzqqqqqzqqqqzqqqqzqzqzzzqqzqqqzzqzzqqqqqqqqqqqzzqzqqqzzqqzzqzqzzzqqzqqzzzzzzqzzzqq...
output:
0 3 3 1 0 2 2 2 1 0 1 0 0 0 1 0 2 0 6 1 0 1 1 0 2 1 1 1 2 4 0 1 3 2 1 0 1 2 0 0 0 1 1 0 1 1 0 4 0 3 ...
result:
ok 10000 tokens
Subtask #2:
score: 24
Accepted
Test #3:
score: 24
Accepted
time: 1791ms
memory: 204964kb
input:
2000 2000 1000000 gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg...
output:
1146 541 203 322 618 166 345 138 520 206 1031 667 741 921 361 1110 1057 372 899 209 491 69 93 639 14...
result:
ok 1000000 tokens
Test #4:
score: 0
Accepted
time: 1212ms
memory: 204968kb
input:
2000 2000 1000000 svsvsvvsvssssvsvvvvssvvvssvsvsvssssvvsvvvsvvsssvssssvssvvsvvvssssssvsvvvvsssvvvsss...
output:
2 0 2 1 2 0 0 1 3 1 0 0 0 1 0 1 0 1 0 6 1 2 2 1 3 5 0 0 1 1 0 0 2 1 1 3 1 0 0 2 1 0 0 0 0 0 1 0 5 0 ...
result:
ok 1000000 tokens
Test #5:
score: 0
Accepted
time: 1657ms
memory: 204964kb
input:
2000 2000 1000000 qqqqqqqqqqqqqqqqcqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq...
output:
327 50 54 421 87 4 189 135 200 214 55 578 82 72 335 52 45 110 521 267 123 21 293 105 105 479 85 69 1...
result:
ok 1000000 tokens
Test #6:
score: 0
Accepted
time: 1657ms
memory: 204964kb
input:
2000 2000 1000000 ssssssssssssssssssssssssssgsssssssssssssssssssssssssssssssssssssssssssssssssssssss...
output:
187 336 26 367 487 65 159 30 12 275 628 200 252 742 362 7 316 232 26 82 607 158 56 444 155 262 1 106...
result:
ok 1000000 tokens
Test #7:
score: 0
Accepted
time: 1856ms
memory: 204968kb
input:
2000 2000 1000000 hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh...
output:
1281 105 890 1087 24 179 172 588 260 206 238 255 150 346 484 224 369 293 15 275 299 125 19 406 1146 ...
result:
ok 1000000 tokens
Test #8:
score: 0
Accepted
time: 1137ms
memory: 204968kb
input:
2000 2000 1000000 cschgfyhvrlhmuchmcssqmxypkfkmkrfwpivfljvlascqlphvlbmjnztypqeoyevqecixdhricknhdrero...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 1000000 tokens
Test #9:
score: 0
Accepted
time: 1274ms
memory: 204968kb
input:
2000 2000 1000000 cwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcw...
output:
0 0 0 0 118 0 0 0 0 0 0 0 0 0 0 0 0 0 178 0 0 0 297 0 0 0 0 0 0 63 0 0 0 115 0 0 0 699 955 0 325 0 0...
result:
ok 1000000 tokens
Subtask #3:
score: 22
Accepted
Test #10:
score: 22
Accepted
time: 2554ms
memory: 204964kb
input:
2000 2000 1000000 iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii...
output:
1182 916 1440 420 469 1353 818 143 458 743 25 1414 878 23 284 453 324 1652 10 556 276 448 1143 916 1...
result:
ok 1000000 tokens
Test #11:
score: 0
Accepted
time: 1864ms
memory: 204968kb
input:
2000 2000 1000000 ddddoddoodoodooddodododdodododdoooddodddddoodoodddddoodddodooddoddooooodddooodddoo...
output:
4 1 1 1 2 0 0 0 4 2 1 1 3 0 0 0 1 4 1 1 0 0 0 2 1 2 1 0 2 0 2 0 2 0 4 4 1 1 0 0 2 0 5 2 0 1 2 1 0 0 ...
result:
ok 1000000 tokens
Test #12:
score: 0
Accepted
time: 2558ms
memory: 204964kb
input:
2000 2000 1000000 dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd...
output:
180 74 19 380 126 169 75 17 53 352 123 150 258 103 65 17 87 109 11 164 407 143 241 407 214 256 84 22...
result:
ok 1000000 tokens
Test #13:
score: 0
Accepted
time: 2805ms
memory: 204968kb
input:
2000 2000 1000000 gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg...
output:
36 41 642 9 356 1100 529 595 2 299 253 559 761 245 494 259 43 234 430 885 449 225 404 211 213 32 38 ...
result:
ok 1000000 tokens
Test #14:
score: 0
Accepted
time: 2102ms
memory: 204964kb
input:
2000 2000 1000000 dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd...
output:
905 292 231 537 281 229 247 240 1460 110 261 530 378 569 206 163 1185 128 983 117 296 79 123 3 53 81...
result:
ok 1000000 tokens
Test #15:
score: 0
Accepted
time: 1338ms
memory: 204968kb
input:
2000 2000 1000000 nvmqmtwqkbpisvkrhgehqvohvizhldbhyiamavjuipxwxeqcqiqwcrjjlxeuvgzpgfwtcdgpymkptfemtv...
output:
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 1000000 tokens
Test #16:
score: 0
Accepted
time: 1465ms
memory: 204968kb
input:
2000 2000 1000000 tctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctc...
output:
0 0 0 0 0 0 0 0 0 0 1 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 344 0 0 0 0 0 0 0 0 0 0 0 1 0 0 546 0 0 0 1 1 ...
result:
ok 1000000 tokens
Subtask #4:
score: 43
Accepted
Test #17:
score: 43
Accepted
time: 1313ms
memory: 103148kb
input:
1000 2000 1000000 yzyzzyaazyyzzaaayzzayyyaaayyazayyzzyazzyazayzayzyzzayyzyzzayzazzyzzayzaazazaaayzyy...
output:
2 0 2 1 1 0 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 1 1 0 0 0 1 0 2 0 1 0 0 0 0 2 1 2 0 1 0 0 0 2 0 0 ...
result:
ok 1000000 tokens
Test #18:
score: 0
Accepted
time: 2293ms
memory: 204968kb
input:
2000 2000 1000000 jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj...
output:
255 79 826 62 931 351 68 1020 265 697 2 1101 779 606 176 1568 696 615 106 596 185 311 65 397 816 25 ...
result:
ok 1000000 tokens
Test #19:
score: 0
Accepted
time: 1592ms
memory: 204964kb
input:
2000 2000 1000000 yyyvvyyyvyyyyvvvyyvyyyyvyyyyyyvvyvvyyyyyvvyyvvyvyvyvvvyyyvyvyvyyvyyyyvyyyvyyyvvyvy...
output:
3 0 0 0 0 1 0 0 0 0 1 2 0 2 1 0 0 0 4 2 0 0 3 1 1 2 3 1 0 1 1 0 0 3 0 0 0 2 0 0 1 0 1 0 0 3 2 0 0 1 ...
result:
ok 1000000 tokens
Test #20:
score: 0
Accepted
time: 2263ms
memory: 204968kb
input:
2000 2000 1000000 jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj...
output:
128 57 641 99 820 2 155 264 232 511 552 36 506 522 31 528 574 506 638 59 127 22 103 53 30 56 14 18 1...
result:
ok 1000000 tokens
Test #21:
score: 0
Accepted
time: 2245ms
memory: 204964kb
input:
2000 2000 1000000 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss...
output:
1 33 165 12 417 104 452 86 315 401 295 141 60 41 76 115 118 150 489 69 46 196 373 109 142 34 115 481...
result:
ok 1000000 tokens
Test #22:
score: 0
Accepted
time: 2597ms
memory: 204968kb
input:
2000 2000 1000000 iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii...
output:
371 247 218 9 492 569 21 454 121 168 207 251 176 236 333 23 138 1501 385 306 342 101 286 204 168 99 ...
result:
ok 1000000 tokens
Test #23:
score: 0
Accepted
time: 1445ms
memory: 204968kb
input:
2000 2000 1000000 ccbxyakkmwxjxctespteblasatcayufpdpqvjjbmatywntdpcnhmwabgpmsyuxvqjtgxutglopldstpcmq...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 ...
result:
ok 1000000 tokens
Test #24:
score: 0
Accepted
time: 1581ms
memory: 204964kb
input:
2000 2000 1000000 mfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmf...
output:
0 0 0 0 2 0 0 1 0 1 0 0 0 0 0 0 2 1 0 361 0 0 0 1 0 0 0 0 1 1 0 1 0 0 1 0 0 0 0 0 323 0 0 0 1 0 0 1 ...
result:
ok 1000000 tokens