fork download
  1. #include<iostream>
  2. #include<math.h>
  3. #include<algorithm>
  4. using namespace std;
  5.  
  6. long long luckiness(long long a) {
  7. long long max_digit = -1;
  8. long long min_digit = 10;
  9. long long tmp;
  10. while (a != 0) {
  11. tmp = a % 10;
  12. a /= 10;
  13. max_digit = max(a, max_digit);
  14. min_digit = min(a, min_digit);
  15. }
  16. return max_digit - min_digit;
  17. }
  18.  
  19. long long solve(long long left, long long right) {
  20. long long tmp1, tmp2;
  21.  
  22. if (right - left >= 100) {
  23. return (right/10 - 1)*10;
  24. }
  25.  
  26. if (right - left > 90) {
  27. tmp1 = ((right-1)/100)*100 + 90; // minus 1 to prevent test case 1 100
  28. if (left <= tmp1 && tmp1 <= right) {
  29. return tmp1;
  30. }
  31. tmp1 = (left/100)*100 + 9;
  32. if (left <= tmp1 && tmp1 <= right) {
  33. return tmp1;
  34. }
  35. }
  36.  
  37. if (right < 10) {
  38. // luckiest == 0.
  39. return 0;
  40. }
  41. else {
  42. left = max(left, 10LL);
  43. }
  44. if (left/10 == right/10) {
  45. return right;
  46. }
  47. if (left/100 != right/100) {
  48. tmp1 = right - left;
  49. if (tmp1 > 17) { // inteval contains a90 or b09
  50. tmp2 = (right/100)*100 + 90;
  51. if (left <= tmp2 && tmp2 <= right) {
  52. return tmp2;
  53. }
  54. tmp2 = (left/100)*100 + 9;
  55. if (left <= tmp2 && tmp2 <= right) {
  56. return tmp2;
  57. }
  58. }
  59. else {
  60. long long luckiest = -1;
  61. for (long long i = left; i <= right; i++) {
  62. luckiest = max(luckiest, i);
  63. }
  64. return luckiest;
  65. }
  66. }
  67.  
  68. tmp1 = (right/10)*10;
  69. return luckiness(tmp1) > luckiness(tmp1 - 1) ? tmp1 : tmp1 - 1;
  70. }
  71.  
  72. int main() {
  73. long long test_cases;
  74. long long left, right;
  75. cin >> test_cases;
  76. while (test_cases--) {
  77. cin >> left >> right;
  78. cout << solve(left, right) << "\n";
  79. }
  80. return 0;
  81. }
Success #stdin #stdout 0.01s 5424KB
stdin
7
59 63
42 49
15 15
53 57
1 100
1 89
191 389
stdout
60
49
15
57
90
80
370