Submission #66375663


Source Code Expand

Copy
#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);
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#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
AC × 2
AC × 57
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


2025-06-01 (Sun)
13:54:50 +09:00