cses

cses solutions in pure c
git clone git://git.superpozycja.net/cses
log | files | refs

s.c (954B)


      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 #include <stdint.h>
      5 
      6 int comp (const void *a, const void *b)
      7 {
      8 	return (*(char *)a - *(char *)b);
      9 }
     10 
     11 uint64_t fact(uint64_t n) {
     12 	uint64_t res = 1;
     13 	for (int i = 2; i <= n; i++)
     14 		res *= i;
     15 	return res;
     16 }
     17 
     18 char a[8];
     19 
     20 int solve()
     21 {
     22 	char abc[26] = {0};
     23 	uint64_t res = 1;
     24 	char s[9];
     25 	char tmp;
     26 	int n;
     27 
     28 	scanf("%s", s);
     29 	n = strlen(s);
     30 	qsort(s, n, sizeof(char), comp);
     31 
     32 	for (int i = 0; i < n; i++)
     33 		abc[s[i]-'a']++;
     34 
     35 	res *= fact(n);
     36 
     37 	for (int i = 0; i < 26; i++)
     38 		res /= fact(abc[i]);
     39 
     40 	printf("%llu\n", res);
     41 
     42 	while (1) {
     43 		int j = n - 2;
     44 		int l = n - 1;
     45 
     46 		printf("%s\n", s);
     47 
     48 		while (j >= 0 && s[j] >= s[j + 1]) j--;
     49 		if (j < 0) break;
     50 
     51 		while (s[j] >= s[l]) l--;
     52 
     53 		tmp = s[j];
     54 		s[j] = s[l];
     55 		s[l] = tmp;
     56 
     57 		for (int k = j + 1, l = n - 1; k < l; k++, l--) {
     58 			tmp = s[k];
     59 			s[k] = s[l];
     60 			s[l] = tmp;
     61 		}
     62 	}
     63 
     64 	return 0;
     65 }
     66 
     67 int main()
     68 {
     69 	int t = 1;
     70 	while (t--)
     71 		solve();
     72 }