Submission #66375663
Source Code Expand
Copy
#include <stdio.h>#include <stdlib.h>#include <string.h>#define Q_MAX 212345int Q;int T[Q_MAX];char* S[Q_MAX];char S_buf[512345];struct node_s {int pos;struct node_s* next[26];};void ki_add(struct node_s** node, const char* str, int value) {if (*node == NULL) {*node = calloc(1, sizeof(**node));if (*node == NULL) exit(2);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Q_MAX 212345
int Q;
int T[Q_MAX];
char* S[Q_MAX];
char S_buf[512345];
struct node_s {
int pos;
struct node_s* next[26];
};
void ki_add(struct node_s** node, const char* str, int value) {
if (*node == NULL) {
*node = calloc(1, sizeof(**node));
if (*node == NULL) exit(2);
(*node)->pos = Q + 1;
}
if (*str < 'a' || 'a' + 26 <= *str) {
if ((*node)->pos > value) (*node)->pos = value;
} else {
ki_add(&(*node)->next[*str - 'a'], str + 1, value);
}
}
int ki_get(const struct node_s* node, const char* str) {
if (node == NULL) {
return Q + 1;
} else {
int ans = node->pos;
if ('a' <= *str && *str < 'a' + 26) {
int candidate = ki_get(node->next[*str - 'a'], str + 1);
if (candidate < ans) ans = candidate;
}
return ans;
}
}
int delta[Q_MAX];
int main(void) {
int i;
struct node_s* root = NULL;
int ans = 0;
if (scanf("%d", &Q) != 1) return 1;
for (i = 0; i < Q; i++) {
if (scanf("%d%512344s", &T[i], S_buf) != 2) return 1;
S[i] = malloc(strlen(S_buf) + 1);
if (S[i] == NULL) return 2;
strcpy(S[i], S_buf);
}
/* X への追加を先に全て登録する */
for (i = 0; i < Q; i++) {
if (T[i] == 1) {
ki_add(&root, S[i], i);
}
}
/* 「将来どこで X に追加されるか」を管理する (現在かそれより前なら捨てる) */
for (i = 0; i < Q; i++) {
if (T[i] == 2) {
int invalidate_pos = ki_get(root, S[i]);
if (invalidate_pos > i) {
ans++;
delta[invalidate_pos]--;
}
}
ans += delta[i];
printf("%d\n", ans);
}
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | E - Forbidden Prefix |
| User | mikecat |
| Language | C (gcc 12.2.0) |
| Score | 500 |
| Code Size | 1669 Byte |
| Status | AC |
| Exec Time | 46 ms |
| Memory | 112084 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 500 / 500 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00_sample_01.txt, 00_sample_02.txt |
| All | 00_sample_01.txt, 00_sample_02.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt, 01_random_22.txt, 01_random_23.txt, 01_random_24.txt, 01_random_25.txt, 01_random_26.txt, 01_random_27.txt, 01_random_28.txt, 01_random_29.txt, 01_random_30.txt, 01_random_31.txt, 01_random_32.txt, 01_random_33.txt, 01_random_34.txt, 01_random_35.txt, 01_random_36.txt, 01_random_37.txt, 01_random_38.txt, 01_random_39.txt, 01_random_40.txt, 01_random_41.txt, 02_handmade_01.txt, 02_handmade_02.txt, 02_handmade_03.txt, 02_handmade_04.txt, 02_handmade_05.txt, 02_handmade_06.txt, 02_handmade_07.txt, 02_handmade_08.txt, 02_handmade_09.txt, 02_handmade_10.txt, 02_handmade_11.txt, 02_handmade_12.txt, 02_handmade_13.txt, 02_handmade_14.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_01.txt | AC | 0 ms | 1588 KiB |
| 00_sample_02.txt | AC | 0 ms | 1616 KiB |
| 01_random_01.txt | AC | 2 ms | 2104 KiB |
| 01_random_02.txt | AC | 17 ms | 41796 KiB |
| 01_random_03.txt | AC | 17 ms | 41608 KiB |
| 01_random_04.txt | AC | 26 ms | 64176 KiB |
| 01_random_05.txt | AC | 37 ms | 92436 KiB |
| 01_random_06.txt | AC | 44 ms | 111580 KiB |
| 01_random_07.txt | AC | 2 ms | 2260 KiB |
| 01_random_08.txt | AC | 11 ms | 25080 KiB |
| 01_random_09.txt | AC | 20 ms | 44208 KiB |
| 01_random_10.txt | AC | 29 ms | 66096 KiB |
| 01_random_11.txt | AC | 36 ms | 89296 KiB |
| 01_random_12.txt | AC | 45 ms | 109372 KiB |
| 01_random_13.txt | AC | 3 ms | 2344 KiB |
| 01_random_14.txt | AC | 41 ms | 16084 KiB |
| 01_random_15.txt | AC | 44 ms | 20728 KiB |
| 01_random_16.txt | AC | 46 ms | 24176 KiB |
| 01_random_17.txt | AC | 42 ms | 50988 KiB |
| 01_random_18.txt | AC | 45 ms | 31292 KiB |
| 01_random_19.txt | AC | 8 ms | 12980 KiB |
| 01_random_20.txt | AC | 22 ms | 40736 KiB |
| 01_random_21.txt | AC | 27 ms | 31664 KiB |
| 01_random_22.txt | AC | 8 ms | 14584 KiB |
| 01_random_23.txt | AC | 25 ms | 31312 KiB |
| 01_random_24.txt | AC | 39 ms | 17244 KiB |
| 01_random_25.txt | AC | 27 ms | 12936 KiB |
| 01_random_26.txt | AC | 30 ms | 13876 KiB |
| 01_random_27.txt | AC | 15 ms | 5424 KiB |
| 01_random_28.txt | AC | 39 ms | 16868 KiB |
| 01_random_29.txt | AC | 32 ms | 21508 KiB |
| 01_random_30.txt | AC | 33 ms | 14728 KiB |
| 01_random_31.txt | AC | 23 ms | 12540 KiB |
| 01_random_32.txt | AC | 24 ms | 10040 KiB |
| 01_random_33.txt | AC | 13 ms | 12488 KiB |
| 01_random_34.txt | AC | 36 ms | 16176 KiB |
| 01_random_35.txt | AC | 26 ms | 12428 KiB |
| 01_random_36.txt | AC | 28 ms | 12464 KiB |
| 01_random_37.txt | AC | 33 ms | 13464 KiB |
| 01_random_38.txt | AC | 34 ms | 24236 KiB |
| 01_random_39.txt | AC | 35 ms | 31212 KiB |
| 01_random_40.txt | AC | 33 ms | 35700 KiB |
| 01_random_41.txt | AC | 33 ms | 39196 KiB |
| 02_handmade_01.txt | AC | 44 ms | 112084 KiB |
| 02_handmade_02.txt | AC | 2 ms | 2708 KiB |
| 02_handmade_03.txt | AC | 30 ms | 10304 KiB |
| 02_handmade_04.txt | AC | 30 ms | 10236 KiB |
| 02_handmade_05.txt | AC | 5 ms | 2784 KiB |
| 02_handmade_06.txt | AC | 5 ms | 2900 KiB |
| 02_handmade_07.txt | AC | 4 ms | 2328 KiB |
| 02_handmade_08.txt | AC | 4 ms | 2244 KiB |
| 02_handmade_09.txt | AC | 5 ms | 2816 KiB |
| 02_handmade_10.txt | AC | 5 ms | 2712 KiB |
| 02_handmade_11.txt | AC | 13 ms | 7940 KiB |
| 02_handmade_12.txt | AC | 12 ms | 8120 KiB |
| 02_handmade_13.txt | AC | 32 ms | 61044 KiB |
| 02_handmade_14.txt | AC | 32 ms | 61072 KiB |