diff options
Diffstat (limited to 'ntu/sagain.c')
-rw-r--r-- | ntu/sagain.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/ntu/sagain.c b/ntu/sagain.c new file mode 100644 index 0000000..243ea8c --- /dev/null +++ b/ntu/sagain.c @@ -0,0 +1,60 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +long *hist[26]; + + +void res(char s0[], + + +int main() +{ + short k; + char s[2000001], alpha; + long length, i, a[26] = {}; + + scanf("%hd", k); + scanf("%s", s); + + length = strlen(s); + + if (length > (k - 1) * 26) { + for (i = 0; i < length; i++) { + alpha = s[i] - 97; + a[alpha]++; + + if (a[alpha] == k) { + short j; + + for (j = 0; j < a[alpha]; j++) + printf("%c", alpha + 97); + + printf("\n"); + break; + } + } + } else { + hist = malloc(208 * length), tmp; + char map[26], j, chr2use = 0; + + for (i = 0; i < length; i++) { + alpha = s[i] - 97; + hist[alpha][a[alpha]] = i; + a[alpha]++; + } + + for (i = 0; i < 26; i++) + map[i] = i; + + for (i = 0; i < 25; i++) + for (j = i; j < 26; j++) + if (a[j] > a[i]) { + tmp = map[i]; + map[i] = map[j]; + map[j] = tmp; + } + } + + return 0; +} |