fork(2) download
  1. #include<bits/stdc++.h>
  2. #define pb push_back
  3. #define fi first
  4. #define se second
  5. #define mp make_pair
  6. using namespace std;
  7. inline int _in(){
  8. char t = getchar(); int o=0,f=0;
  9. while(t>47&&t<58)o=o*10+t-48,t=getchar();
  10. return f?-o:o;
  11. }
  12. typedef long long ll;
  13. typedef pair<int, int> pii;
  14. int cn[11],d[11],t;
  15. long long ans[25];
  16. long long C[25][25];
  17.  
  18. int main(){
  19. long long n;
  20. cin >>n;
  21. while(n){
  22. if(!cn[n%10])t++;
  23. cn[n%10]++;
  24. n/=10;
  25. }
  26. C[0][0] = 1;
  27. for(int i = 1; i <= 20; i++){
  28. for(int j = 0; j <= i; j++){
  29. ll c=1;
  30. for(int k = i; k >= i-j+1; k--) c*=k;
  31. for(int k = 1; k <= j; k++) c/=k;
  32. C[i][j] = c;
  33. }
  34. }
  35. for(int a = 0; a <= cn[0]; a++)
  36. for(int b = 0; b <= cn[1]; b++)
  37. for(int c = 0; c <= cn[2]; c++)
  38. for(int d = 0; d <= cn[3]; d++)
  39. for(int e = 0; e <= cn[4]; e++)
  40. for(int f = 0; f <= cn[5]; f++)
  41. for(int g = 0; g <= cn[6]; g++)
  42. for(int h = 0; h <= cn[7]; h++)
  43. for(int i = 0; i <= cn[8]; i++)
  44. for(int j = 0; j <= cn[9]; j++){
  45. if(cn[0]&&!a) continue;
  46. if(cn[1]&&!b) continue;
  47. if(cn[2]&&!c) continue;
  48. if(cn[3]&&!d) continue;
  49. if(cn[4]&&!e) continue;
  50. if(cn[5]&&!f) continue;
  51. if(cn[6]&&!g) continue;
  52. if(cn[7]&&!h) continue;
  53. if(cn[8]&&!i) continue;
  54. if(cn[9]&&!j) continue;
  55.  
  56. int t = a+b+c+d+e+f+g+h+i+j, s=t;
  57. long long m=1;
  58. if(a){
  59. m *= C[t-1][a]; t-=a;
  60. }
  61. m *= C[t][b]; t-=b;
  62. m *= C[t][c]; t-=c;
  63. m *= C[t][d]; t-=d;
  64. m *= C[t][e]; t-=e;
  65. m *= C[t][f]; t-=f;
  66. m *= C[t][g]; t-=g;
  67. m *= C[t][h]; t-=h;
  68. m *= C[t][i]; t-=i;
  69. m *= C[t][j]; t-=j;
  70. ans[s] += m;
  71. }
  72. for(int i = 0; i<21; i++)ans[0] += ans[i];
  73. cout<<ans[0];
  74. }
Success #stdin #stdout 0s 4404KB
stdin
2028
stdout
13