fork(1) download
  1. #include <iostream>
  2. #include <cmath>
  3. #include <algorithm>
  4. using namespace std;
  5. long long nums[9];
  6. long long k;
  7. long long d;
  8. long long quantity = 0;
  9. long long was[40320];
  10. bool Was(long long h) {
  11. long long c = 0;
  12. for (int i = 0; i < quantity; i++) {
  13. if (was[i] == h) c++;
  14. }
  15. if (c == 0) {
  16. was[quantity] = h;
  17. return true;
  18. }
  19. else
  20. return false;
  21. }
  22. void Swap(long long a,long long b)
  23. {
  24. long long t = nums[a];
  25. nums[a] = nums[b];
  26. nums[b] = t;
  27. }
  28. void Generate(long long n)
  29. {
  30. if (n==k)
  31. {
  32. long long sum = 0;
  33. long long p = 1;
  34. long long h = 0;
  35. long long hash = 1;
  36. for (long long i = k - 1; i >= 0; i--) {
  37. long long subs = nums[i];
  38. sum += nums[i]%d*p;
  39. p *= pow(10, long(log10(nums[i]))+1);
  40. p = p%d;
  41. while (subs!= 0) {
  42. h += subs%10*hash;
  43. hash *= 101;
  44. subs /= 10;
  45. }
  46. }
  47. if (sum%d == 0 && Was(h) == true) {
  48. quantity++;
  49. }
  50. }
  51. else {
  52. for(long long j = n; j < k;j++) {
  53. Swap(n,j);
  54. Generate(n+1);
  55. Swap(n,j);
  56. }
  57. }
  58. }
  59.  
  60. int main()
  61. {
  62. cin >> d >> k;
  63. for(long long i = 0; i < k; i++) {
  64. cin >> nums[i];
  65. }
  66. Generate(0);
  67. cout << quantity;
  68. return 0;
  69. }
Success #stdin #stdout 0.07s 4368KB
stdin
71 8
4018916609
7495223237
3405637482
3166003637
8998228133
1141886496
9124347310
7736090711
stdout
584