Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. /*
  2. Silver Marriage, tunyash@gmail.com
  3. */
  4. #include <iostream>
  5. #include <fstream>
  6. #include <stack>
  7. #include <cstdlib>
  8. #include <cmath>
  9. #include <string>
  10. #include <set>
  11. #include <map>
  12. #include <vector>
  13. #include <algorithm>
  14. #include <ctime>
  15. #include <cassert>
  16. #include <stdio.h>
  17. #include <queue>
  18.  
  19. using namespace std;
  20.  
  21. #define mp make_pair
  22. #define pb push_back
  23. #define gcd(a,b) __gcd(a,b)
  24. #define forn(i,n) for(int i = 0; i < n; i++)
  25. #define ford(i,n) for(int i = n - 1; i >= 0; i--)
  26. #define forab(i,l,r) for(int i = l; i <= r; i++)
  27. #define forabd(i,r,l) for(int i = r; i >= l; i--)
  28. #define sqr(x) ((x) * (x))
  29. #define X first
  30. #define Y second
  31. #define FILENAME ""
  32.  
  33. const long long base = 1000000000 + 7;
  34. const long double eps = 1e-9;
  35.  
  36. typedef long long ll;
  37. typedef pair<int, int> pii;
  38. typedef vector<int> vi;
  39.  
  40. int f[11111];
  41.  
  42. map <int, pair <int, int> > pos;
  43.  
  44.  
  45. bool ok(int d)
  46. {
  47. vector <int> dd;
  48. while (d)
  49. {
  50. dd.push_back(d % 10);
  51. d /= 10;
  52. }
  53. reverse(dd.begin(), dd.end());
  54. pair <int, int> st = pos[dd[0]];
  55. for (int i = 1; i < (int)dd.size(); i++)
  56. {
  57. pair <int, int> tmp = pos[dd[i]];
  58. int dx = tmp.first - st.first;
  59. int dy = tmp.second - st.second;
  60. if (dx < 0 || dy < 0)
  61. return false;
  62. st = tmp;
  63. }
  64. return true;
  65. }
  66.  
  67. int solve(){
  68. int n;
  69. cin >> n;
  70. if (f[n] != -1)
  71. {
  72. return f[n];
  73. }
  74. for (int i = 0; i < n; i++)
  75. {
  76. int d = n - i;
  77. if (ok(d))
  78. {
  79. f[n] = d;
  80. return d;
  81. }
  82. d = n + i;
  83. if (ok(d))
  84. {
  85. f[n] = d;
  86. return d;
  87. }
  88. }
  89. }
  90.  
  91. int main(){
  92. // ios_base :: sync_with_stdio(false);
  93. // freopen (FILENAME".in", "r", stdin);
  94. // freopen (FILENAME".out", "w", stdout);
  95. int test = 1;
  96. for (int i = 0; i < 3; i++)
  97. for (int j = 0; j < 3; j++)
  98. pos[i * 3 + j + 1] = mp(i, j);
  99. pos[0] = mp(3, 1);
  100. for (int i = 1; i <= 200; i++)
  101. f[i] = -1;
  102. cin >> test;
  103. while (test--){
  104. cout << solve() << "\n";
  105. }
  106. return 0;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement