Submission #67477211
Source Code Expand
Copy
#include <stdio.h>#include <string.h>typedef unsigned long long ull;#define MOD_BY 2892148736031121531ULL#define MULT 548571274668263447ULL#define MULT_INV 1933731169782078360ULLull add(ull a, ull b) {return a + b - MOD_BY * (a + b >= MOD_BY);}ull sub(ull a, ull b) {return b == 0 ? a : add(a, MOD_BY - b);}ull mul(ull a, ull b) {ull r = 0;while (b > 0) {if (b & 1) r = add(r, a);
#include <stdio.h>
#include <string.h>
typedef unsigned long long ull;
#define MOD_BY 2892148736031121531ULL
#define MULT 548571274668263447ULL
#define MULT_INV 1933731169782078360ULL
ull add(ull a, ull b) {
return a + b - MOD_BY * (a + b >= MOD_BY);
}
ull sub(ull a, ull b) {
return b == 0 ? a : add(a, MOD_BY - b);
}
ull mul(ull a, ull b) {
ull r = 0;
while (b > 0) {
if (b & 1) r = add(r, a);
a = add(a, a);
b >>= 1;
}
return r;
}
ull mult_pow[512];
ull mult_inv_pow[512];
ull value[512];
ull cache[512][512];
/* [s, e) のハッシュ値を求める */
ull get_hash(int s, int e) {
if (cache[s][e]) return ~cache[s][e];
return ~(cache[s][e] = ~mul(sub(value[e], value[s]), mult_inv_pow[s]));
}
int main(void) {
char S[512];
int N;
int i, j, k, ans = 0;
if (scanf("%511s", S) != 1) return 1;
N = (int)strlen(S);
mult_pow[0] = 1;
mult_inv_pow[0] = 1;
for (i = 1; i <= N; i++) {
mult_pow[i] = mul(mult_pow[i - 1], MULT);
mult_inv_pow[i] = mul(mult_inv_pow[i - 1], MULT_INV);
}
for (i = 0; i < N; i++) {
value[i + 1] = add(value[i], mul((unsigned char)S[i], mult_pow[i]));
}
for (i = 2; i < N - 3; i++) { /* S_3 の終わりはどこか */
for (j = 1; i - j >= 1 && i + 1 + j <= N - 2; j++) { /* S_3 は何文字か */
if (get_hash(i - j + 1, i + 1) != get_hash(i + 1, i + 1 + j)) continue; /* S_3 != S_4 */
for (k = 1; i - j - k >= 0 && N - k > i + 1 + j; k++) { /* S_2 は何文字か */
if (get_hash(i - j - k + 1, i - j + 1) != get_hash(N - k, N)) continue; /* S_2 != S_6 */
ans++;
}
}
}
printf("%d\n", ans);
return 0;
}
/*
* S_3 の終わりはどこか
* S_3 は何文字か
* S_2 は何文字か
で全探索 O(|S|^3)
*/
Submission Info
| Submission Time | |
|---|---|
| Task | B - NIKKEI String |
| User | mikecat |
| Language | C (gcc 12.2.0) |
| Score | 300 |
| Code Size | 1773 Byte |
| Status | AC |
| Exec Time | 20 ms |
| Memory | 3716 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 300 / 300 | ||||
| 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, s1.txt, s2.txt, s3.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 01.txt | AC | 0 ms | 1696 KiB |
| 02.txt | AC | 0 ms | 1696 KiB |
| 03.txt | AC | 0 ms | 1604 KiB |
| 04.txt | AC | 1 ms | 1780 KiB |
| 05.txt | AC | 0 ms | 1684 KiB |
| 06.txt | AC | 0 ms | 1636 KiB |
| 07.txt | AC | 0 ms | 1700 KiB |
| 08.txt | AC | 0 ms | 1808 KiB |
| 09.txt | AC | 0 ms | 1788 KiB |
| 10.txt | AC | 0 ms | 1668 KiB |
| 11.txt | AC | 10 ms | 3716 KiB |
| 12.txt | AC | 10 ms | 3584 KiB |
| 13.txt | AC | 10 ms | 3592 KiB |
| 14.txt | AC | 10 ms | 3716 KiB |
| 15.txt | AC | 10 ms | 3564 KiB |
| 16.txt | AC | 10 ms | 3672 KiB |
| 17.txt | AC | 10 ms | 3672 KiB |
| 18.txt | AC | 10 ms | 3576 KiB |
| 19.txt | AC | 10 ms | 3548 KiB |
| 20.txt | AC | 10 ms | 3536 KiB |
| 21.txt | AC | 20 ms | 3552 KiB |
| 22.txt | AC | 13 ms | 3548 KiB |
| 23.txt | AC | 12 ms | 3712 KiB |
| 24.txt | AC | 13 ms | 3560 KiB |
| 25.txt | AC | 11 ms | 3520 KiB |
| 26.txt | AC | 11 ms | 3568 KiB |
| 27.txt | AC | 11 ms | 3560 KiB |
| 28.txt | AC | 10 ms | 3548 KiB |
| 29.txt | AC | 10 ms | 3712 KiB |
| 30.txt | AC | 10 ms | 3532 KiB |
| 31.txt | AC | 10 ms | 3644 KiB |
| 32.txt | AC | 10 ms | 3552 KiB |
| 33.txt | AC | 10 ms | 3516 KiB |
| 34.txt | AC | 13 ms | 3560 KiB |
| 35.txt | AC | 20 ms | 3672 KiB |
| 36.txt | AC | 14 ms | 3716 KiB |
| 37.txt | AC | 12 ms | 3592 KiB |
| 38.txt | AC | 13 ms | 3648 KiB |
| 39.txt | AC | 12 ms | 3636 KiB |
| 40.txt | AC | 12 ms | 3572 KiB |
| s1.txt | AC | 0 ms | 1652 KiB |
| s2.txt | AC | 0 ms | 1632 KiB |
| s3.txt | AC | 0 ms | 1692 KiB |