ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#213377 | #2068. 最长公共前缀 | nodgd | 100 | 10014ms | 124936kb | C++ | 4.0kb | 2024-11-11 21:00:27 | 2024-11-11 23:04:41 |
answer
#include <bits/stdc++.h>
using namespace std;
const int BUFFER_SIZE = 1 << 20;
char rb[BUFFER_SIZE], *rp = rb, *rt = rb;
inline char read_char() {
return rp == rt ? (rt = rb + fread(rb, 1, BUFFER_SIZE, stdin), rp = rb, *rp ++) : *rp ++;
}
inline int read_int() {
int x = 0;
char ch = read_char(), flag = 0;
while (ch != '-' && (ch < '0' || ch > '9')) {
ch = read_char();
}
if (ch == '-') {
flag = 1;
ch = read_char();
}
for (x = 0; ch >= '0' && ch <= '9'; ch = read_char()) {
x = x * 10 + (ch - '0');
}
return flag ? -x : x;
}
inline int read_string(char* s) {
char* s0 = s;
for (char ch = read_char(); ch > ' '; ch = read_char()) {
*s ++ = ch;
}
return s - s0;
}
char wb[BUFFER_SIZE], *wp = wb;
inline void write_flush() {
fwrite(wb, 1, wp - wb, stdout);
wp = wb;
}
inline void write_char(char c) {
*wp ++ = c;
if (wp == wb + BUFFER_SIZE) {
write_flush();
}
}
inline void write_int(int x) {
if (x == 0) {
write_char('0');
} else if (x < 0) {
write_char('-');
x = -x;
}
static char b[32], i;
for (i = 1; x; i ++) {
b[i] = x % 10 + '0';
x /= 10;
}
for (i --; i; i --) {
write_char(b[i]);
}
}
const int MAX_N = 2000 + 5;
const int B = 31, P = 999999001;
int N, M, Q;
char a[MAX_N][MAX_N];
int pw[MAX_N], hh[MAX_N][MAX_N], hv[MAX_N][MAX_N], hd[MAX_N << 1][MAX_N];
int fh[MAX_N][MAX_N], fv[MAX_N][MAX_N], fd[MAX_N << 1][MAX_N];
int main() {
N = read_int(), M = read_int(), Q = read_int();
for (int i = 1; i <= N; i ++) {
read_string(a[i] + 1);
}
pw[0] = -1;
for (int i = 1; i <= N || i <= M; i ++) {
pw[i] = pw[i - 1] * B;
}
for (int i = N; i >= 1; i --) {
for (int j = M; j >= 1; j --) {
int aa = a[i][j] - 96;
hh[i][j] = hh[i][j + 1] * B + aa;
hv[j][i] = hv[j][i + 1] * B + aa;
hd[i - j + M][i + j >> 1] = hd[i - j + M][i + j + 2 >> 1] * B + aa;
fh[i][j] = a[i][j] == a[i][j + 1] ? fh[i][j + 1] + 1 : 1;
fv[j][i] = a[i][j] == a[i + 1][j] ? fv[j][i + 1] + 1 : 1;
fd[i - j + M][i + j >> 1] = a[i][j] == a[i + 1][j + 1] ? fd[i - j + M][i + j + 2 >> 1] + 1 : 1;
}
}
for (int i = 1; i <= Q; i ++) {
int ans = 0;
char d1[4], d2[4];
int x1 = read_int(), y1 = read_int();
read_string(d1);
int x2 = read_int(), y2 = read_int();
read_string(d2);
if (a[x1][y1] == a[x2][y2]) {
int f1 = *d1 == 'H' ? fh[x1][y1] : *d1 == 'V' ? fv[y1][x1] : fd[x1 - y1 + M][x1 + y1 >> 1];
int f2 = *d2 == 'H' ? fh[x2][y2] : *d2 == 'V' ? fv[y2][x2] : fd[x2 - y2 + M][x2 + y2 >> 1];
if (f1 != f2) {
ans = min(f1, f2);
} else {
ans += f1;
*d1 == 'H' ? y1 += f1 : *d1 == 'V' ? x1 += f1 : (x1 += f1, y1 += f1);
*d2 == 'H' ? y2 += f2 : *d2 == 'V' ? x2 += f2 : (x2 += f2, y2 += f2);
int n1 = *d1 == 'H' ? M - y1 + 1 : *d1 == 'V' ? N - x1 + 1 : min(N - x1 + 1, M - y1 + 1);
int n2 = *d2 == 'H' ? M - y2 + 1 : *d2 == 'V' ? N - x2 + 1 : min(N - x2 + 1, M - y2 + 1);
int* h1 = *d1 == 'H' ? hh[x1] + y1 : *d1 == 'V' ? hv[y1] + x1 : hd[x1 - y1 + M] + (x1 + y1 >> 1);
int* h2 = *d2 == 'H' ? hh[x2] + y2 : *d2 == 'V' ? hv[y2] + x2 : hd[x2 - y2 + M] + (x2 + y2 >> 1);
int l = 0, r = min(n1, n2);
while (l < r) {
int m = l + r + 1 >> 1;
int t1 = h1[0] + h1[m] * pw[m];
int t2 = h2[0] + h2[m] * pw[m];
t1 == t2 ? l = m : r = m - 1;
}
ans += l;
}
}
write_int(ans), write_char('\n');
}
write_flush();
fprintf(stderr, "clock=%d\n", clock());
return 0;
}
详细
小提示:点击横条可展开更详细的信息
Subtask #1:
score: 11
Accepted
Test #1:
score: 11
Accepted
time: 172ms
memory: 90624kb
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: 123ms
memory: 92612kb
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: 523ms
memory: 124936kb
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: 486ms
memory: 124932kb
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: 530ms
memory: 124928kb
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: 387ms
memory: 124932kb
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: 543ms
memory: 124932kb
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: 385ms
memory: 124932kb
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: 479ms
memory: 124932kb
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: 499ms
memory: 124936kb
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: 601ms
memory: 124932kb
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: 496ms
memory: 124932kb
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: 550ms
memory: 124936kb
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: 395ms
memory: 124932kb
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: 313ms
memory: 124936kb
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: 408ms
memory: 124932kb
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: 267ms
memory: 91624kb
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: 434ms
memory: 124932kb
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: 436ms
memory: 124928kb
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: 448ms
memory: 124932kb
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: 411ms
memory: 124936kb
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: 397ms
memory: 124932kb
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: 324ms
memory: 124928kb
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: 407ms
memory: 124932kb
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