50206. Three Letter Pattern
難度:3.5/51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <string.h>
typedef struct{
int num;
int cnt;
} s_info;
int n;
char s[100005];
s_info info[17576];
int cmp(const void* aa, const void* bb){
s_info* a = (s_info*)aa;
s_info* b = (s_info*)bb;
if(a->cnt != b->cnt) return b->cnt - a->cnt;
return a->num - b->num;
}
int mapping(int i){
return ((s[i] - 'a') * (26 * 26) + (s[i + 1] - 'a') * (26) + (s[i + 2] - 'a'));
}
void to_str(int k){
int s1 = k / (26 * 26); k %= (26 * 26);
int s2 = k / 26; k %= 26;
int s3 = k;
printf("%c%c%c\n", s1 + 'a', s2 + 'a', s3 + 'a');
}
int main(){
fgets(s, 100005, stdin);
n = strlen(s);
for(int i = 0; i < 17576; i++) info[i].num = i, info[i].cnt = 0;
for(int i = 0; i < n - 3; i++){
if(s[i] == ' ' || s[i + 1] == ' ' || s[i + 2] == ' ') continue;
int num = mapping(i);
info[num].cnt += 1;
}
qsort(info, 17576, sizeof(s_info), cmp);
for(int i = 0; i < 3; i++){
to_str(info[i].num);
}
}