fork download
  1. #include<iostream>
  2. #include<vector>
  3. #include<string>
  4. #include<cmath>
  5. #include<algorithm>
  6.  
  7. using namespace std;
  8.  
  9. bool check_direct(int);
  10. int check_int_size(int);
  11.  
  12. vector<bool> broken;
  13.  
  14. int main()
  15. {
  16. int N,M,idx, min_value = 500000, result = 0;
  17. bool direct = true;
  18. string str_N = to_string(N);
  19. cin >> N >> M;
  20. broken.resize(10,false);
  21.  
  22. for(int i=0; i<M; ++i){
  23. cin >> idx; broken[idx] = true;
  24. }
  25.  
  26. for(int i=0; i<str_N.size(); ++i){
  27. if(broken[str_N[i]-48]) direct = false;
  28. }
  29.  
  30. if(direct) min_value = str_N.size();// Direct press
  31.  
  32. for(int i=N; i<(N+1)*10; ++i){
  33. if(check_direct(i)){
  34. min_value = min(min_value, check_int_size(i)+abs(N-i)); break;
  35. }
  36. }
  37.  
  38. for(int i=N; i>=0; --i){
  39. if(check_direct(i)){
  40. min_value = min(min_value, check_int_size(i)+abs(N-i)); break;
  41. }
  42. }
  43.  
  44. result = min(min_value, abs(N-100));
  45. cout << result << "\n";
  46. return 0;
  47. }
  48.  
  49. bool check_direct(int num)
  50. {
  51. string str_num = to_string(num);
  52. for(int i=0; i<str_num.size(); ++i)
  53. {
  54. if(broken[str_num[i]-48]) return false;
  55. }
  56. return true;
  57. }
  58.  
  59. int check_int_size(int num)
  60. {
  61. string str_num = to_string(num);
  62. int num_size = str_num.size();
  63. return num_size;
  64. }
Success #stdin #stdout 0s 4440KB
stdin
9999
1
9
stdout
5