fork(3) download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void Sortowanie( int tab[], int left, int right )
  6. {
  7. int i = left;
  8. int j = right;
  9. int x = tab[( left + right ) / 2 ];
  10. do
  11. {
  12. while( tab[ i ] < x )
  13. i++;
  14.  
  15. while( tab[ j ] > x )
  16. j--;
  17.  
  18. if( i <= j )
  19. {
  20. swap( tab[ i ], tab[ j ] );
  21.  
  22. i++;
  23. j--;
  24. }
  25. }
  26. while( i <= j );
  27.  
  28. if( left < j ) Sortowanie( tab, left, j );
  29.  
  30. if( right > i ) Sortowanie( tab, i, right );
  31.  
  32. }
  33. int silnia (int n, int a)
  34. {
  35. if (n == a) return a;
  36. else return n*silnia(n-1,a);
  37. }
  38.  
  39. int silnia_1 (int n)
  40. {
  41. if (n == 0) return 1;
  42. else return n*silnia_1(n-1);
  43. }
  44.  
  45. string wyraz;
  46. int d,tab[1000],tab_licz[1000],licznik,ile;
  47. long long int mianownik, licznik_k,wynik;
  48. int main()
  49. {
  50. cin>>ile;
  51. for(int k=0; k<ile; k++)
  52. {
  53. cin>>wyraz;
  54. d=wyraz.length();
  55. for(int i=0; i<d; i++)
  56. {
  57. tab[i]=(int)wyraz[i];
  58. }
  59. Sortowanie(tab, 0,d-1);
  60.  
  61. int j=0;
  62. licznik=1;
  63. for(int i=0; i<d; i++)
  64. {
  65. if((tab[i]==tab[i+1])&&i<d)
  66. {
  67. licznik++;
  68. }
  69.  
  70. if((tab[i]!=tab[i+1])&&i<d)
  71. {
  72. tab_licz[j]=licznik;
  73. licznik=1;
  74. j++;
  75. }
  76. }
  77. if(tab[0]!=tab[d-1])
  78. {
  79. Sortowanie(tab_licz, 0, j-1);
  80.  
  81. mianownik=1;
  82.  
  83. for(int i=0; i<(j-1); i++)
  84. {
  85. mianownik=silnia_1(tab_licz[i])*mianownik;
  86. }
  87.  
  88. licznik_k=silnia(d, tab_licz[j-1]+1);
  89. wynik=licznik_k/mianownik;
  90. cout<<wynik<<endl;
  91. }else
  92. cout<<1<<endl;
  93. licznik_k=0;
  94. mianownik=0;
  95.  
  96. }
  97. return 0;
  98. }
  99.  
Success #stdin #stdout 0s 16072KB
stdin
11
as
aa
am
opa
cici
kululu
beeeeeeeeeeeeeeeeeeeeeeeeeeee
asss
sssd
ssd
a
stdout
2
1
2
6
6
60
29
4
4
6
1