質問内容
AtCoderの以下のリンクにおける過去問を解いていました.
最初に書いたコード1ではTLEとなってしまい,解説をみてソートをしてから比較しないとTLEになってしまうと書いてあったので,コード2ではソートしてから比較するようにしてみたのですが,コード1よりもTLEになってしまうケースが増えてしまいました.どのようなところが実行時間を引き延ばしている原因なのか教えていただきたいです.
コード1
C
1#include<stdio.h> 2#include<stdlib.h> 3#include<string.h> 4int main(void){ 5 int N; 6 char **str; 7 int count=1; 8 9 scanf("%d",&N); 10 str=(char **)malloc(sizeof(char *)*N); 11 for(int i=0;i<N;i++){ 12 str[i]=(char *)malloc(sizeof(char)*11); 13 } 14 for(int i=0;i<N;i++){ 15 scanf("%s",str[i]); 16 for(int j=0;j<i;j++){ 17 if(strcmp(str[i],str[j])==0) break; 18 if(j==i-1) count++; 19 } 20 } 21 printf("%d\n",count); 22 return 0; 23} 24
コード2
C
1#include<stdio.h> 2#include<stdlib.h> 3#include<string.h> 4 5 char **str; 6 7void sort(int num){ 8 char tmp[11]; 9 for(int i=1;i<num;i++){ 10 for(int j=1;j<num;j++){ 11 if(strcmp(str[j-1], str[j])>0){ 12 strcpy(tmp, str[j-1]); 13 strcpy(str[j-1], str[j]); 14 strcpy(str[j], tmp); 15 } 16 } 17 } 18 19} 20int main(void){ 21 int N; 22 int count=1; 23 24 scanf("%d",&N); 25 str=(char **)malloc(sizeof(char *)*N); 26 for(int i=0;i<N;i++){ 27 str[i]=(char *)malloc(sizeof(char)*11); 28 } 29 for(int i=0;i<N;i++) scanf("%s",str[i]); 30 sort(N); 31 for(int i=1;i<N;i++){ 32 if(strcmp(str[i],str[i-1])!=0) count++; 33 } 34 printf("%d\n",count); 35 return 0; 36} 37
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/10 14:51
2020/08/10 23:57
2020/08/12 07:01
2020/08/12 07:19
2020/08/12 07:30
2020/08/12 11:05
2020/08/12 14:07
2020/08/16 11:03
2020/08/16 11:33
2020/08/16 11:58
2020/08/16 11:59
2020/08/16 12:07