From a01bed67b5145740f64d9d78395561b083d3c956 Mon Sep 17 00:00:00 2001 From: yenru0 Date: Tue, 30 Apr 2024 11:43:08 +0900 Subject: [PATCH] modified completed 14425.c --- zeta_C/completed/14425.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/zeta_C/completed/14425.c b/zeta_C/completed/14425.c index 6adf134..7315387 100644 --- a/zeta_C/completed/14425.c +++ b/zeta_C/completed/14425.c @@ -4,13 +4,22 @@ int STR_LEN = 501; -int is_in(char *a, char (*S)[STR_LEN], int N) { +int comp(const void *a, const void *b) { + return strcmp((char *) a, (char *) b); +} - for (int i = 0; i < N; i++) { - int c = strcmp(a, S[i]); - if (c == 0) { - return 1; - } +int is_in(char *a, char (*S)[STR_LEN], int N) { + // binary search + int low = 0, high = N - 1; + while (low <= high) { + int mid = (low + high) / 2; + + int k = (int) strcmp(a, S[mid]); + if (k == 0) return 1; + else if (k < 0) + high = mid - 1; + else if (k > 0) + low = mid + 1; } return 0; } @@ -31,6 +40,8 @@ int main() { scanf("%s", (check[i])); } + qsort(S, N, sizeof(char) * 501, comp); + int count = 0; for (int i = 0; i < M; i++) { count += is_in((check[i]), S, N);