fork download
  1. #include<bits/stdc++.h>
  2. #define f1(i, n) for(ll i=1;i<=n;++i)
  3. #define f0(i, n) for(ll i=0;i<n;++i)
  4. #define ull unsigned long long
  5. #define ll long long
  6. #define rev(a) reverse(a.begin(),a.end())
  7. #define all(x) x.begin(),x.end()
  8. #define so(A, n) sort(A+1, A+n+1)
  9. using namespace std;
  10. const int maxn = 200010;
  11. const int N = 1e5 + 1;
  12. // Duyet trau
  13. void c1() {
  14. int n;
  15. string s;
  16. cin >> n >> s;
  17. bool ch['9' + 1] = {};
  18. int cnt = 0;
  19. for (int i = 0; i < s.size(); ++i) ch[s[i]] = true;
  20. for (int i = 1; i <= n; ++i) {
  21. string a = to_string(i);
  22. bool check = true;
  23. for (int j = 0; j < a.size(); ++j) {
  24. if (ch[a[j]]) {
  25. check = false;
  26. break;
  27. }
  28. }
  29. if (!check) cnt++;
  30. }
  31. cout << n - cnt;
  32. }
  33. // Backtracking
  34. vector<int> v;
  35. int ans = 0, n, cnt = 0;
  36. int countDigit(int n) {
  37. int res = 0;
  38. while (n != 0) {n /= 10; ++res;}
  39. return res;
  40. }
  41. set<int> result;
  42. void backtrack(int pos, int uia) {
  43. if (pos > uia) {
  44. return;
  45. }
  46. for (int i = 0; i < v.size(); ++i) {
  47. ans = ans * 10 + v[i];
  48. if (ans <= n && ans != 0) {
  49. result.insert(ans);
  50. }
  51. backtrack(pos + 1, uia);
  52. ans /= 10;
  53. }
  54. }
  55. int main()
  56. {
  57. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  58. string s;
  59. cin >> n >> s;
  60. for (int i = 0; i <= 9; ++i) {
  61. v.push_back(i);
  62. for (int j = 0; j < s.size(); ++j) {if (s[j] - 48 == i) {v.pop_back(); break;}}
  63. }
  64. int motcaigiday = countDigit(n);
  65. backtrack(1, motcaigiday);
  66. cout << result.size() << "\n";
  67. return 0;
  68. }
  69.  
  70.  
Success #stdin #stdout 0.01s 5320KB
stdin
20
2
stdout
17