Advertisement
Guest User

SNWS-3 B

a guest
Jan 20th, 2012
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  1. #pragma comment(linker, "/STACK:10000000")
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #define _CRT_SECURE_NO_DEPRECATE
  4.  
  5. #include <cassert>
  6. #include <cstdio>
  7. #include <iostream>
  8. #include <sstream>
  9. #include <numeric>
  10. #include <bitset>
  11. #include <vector>
  12. #include <set>
  13. #include <string>
  14. #include <map>
  15. #include <cmath>
  16. #include <algorithm>
  17. #include <queue>
  18. #include <cstdlib>
  19. #include <functional>
  20. #include <cstring>
  21. #include <ctime>
  22. using namespace std;
  23.  
  24. typedef long long ll;
  25. typedef unsigned long long ull;
  26. typedef double ld;
  27. typedef vector<int> vi;
  28. typedef pair<int, int> pii;
  29. template <class T> T inline sqr(T x) { return x * x; }
  30. template <class T> string str( T i ) { stringstream ss; ss << i; return ss.str(); }
  31. int toint(string a) {istringstream is(a); int p; is>>p; return p;}
  32. long long toll(string a){istringstream is(a);long long p;is>>p;return p;}
  33.  
  34. #define pb push_back
  35. #define mp make_pair
  36. #define e1 first
  37. #define e2 second
  38. #define sz size
  39.  
  40. #if ( _WIN32 || __WIN32__ )
  41. #define LLD "%I64d"
  42. #else
  43. #define LLD "%lld"
  44. #endif
  45. #define forn(i, n) for (i = 0; i < int(n); i++)
  46. #define fornd(i, n) for (i = int(n - 1); i >= 0; i--)
  47. #define forv(i, a) for (i = 0; i < int(a.size()); i++)
  48. #define fors(i, a) for (i = 0; i < int(a.length()); i++)
  49. #define rep(i, st, fin) for (i = int(st); i < int(fin); i++)
  50. #define repd(i, st, fin) for (i = int(fin - 1); i >= int(st); i--)
  51. #define setval(a,v) memset(a, v, sizeof(a))
  52. const ld pi = 3.1415926535897932384626433832795, eps = 1e-8;
  53.  
  54. ld d1[10][10], d2[10][10];
  55. int a[100500];
  56. const ld inf = 1000000000;
  57.  
  58. ld r(int u, int v)
  59. {
  60. if (u == v)
  61. return 0.0;
  62. if (u > v)
  63. swap(u, v);
  64. ld res = 0;
  65. if (u == 0)
  66. {
  67. if (v % 3 == 2)
  68. return 3.0 - (v / 3);
  69. else
  70. return pow(sqr(3 - ((v - 1)/ 3)) + 1.0, 0.5);
  71. }
  72. res = pow(double(sqr((v - u) % 3)) + sqr((v - u) / 3), 0.5);
  73. return res;
  74. }
  75. int main()
  76. {
  77. freopen("fastdial.in", "r", stdin); freopen("fastdial.out", "w", stdout);
  78. string s;
  79. cin >> s;
  80. int i, j, k, n = s.length();
  81. forn (i, n)
  82. a[i] = s[i] - '0';
  83. int t = a[0], u;
  84. forn (i, 10)
  85. d1[t][i] = d1[i][t] = 0;
  86. forn (k, n - 1)
  87. {
  88. forn (i, 10)
  89. forn (j, 10)
  90. d2[i][j] = inf;
  91. t = a[k];
  92. u = a[k + 1];
  93. forn (i, 10)
  94. {
  95. d2[u][t] = d2[t][u] = min(d2[t][u], d1[t][i] + r(i, u));
  96. d2[i][u] = d2[u][i] = min(d2[i][u], d1[t][i] + r(t, u));
  97. }
  98. forn (i, 10)
  99. forn (j, 10)
  100. d1[i][j] = d2[i][j];
  101. }
  102. ld ans = inf;
  103. forn (i, 10)
  104. forn (j, 10)
  105. if (i == a[n - 1] || j == a[n - 1])
  106. ans = min(ans, d1[i][j]);
  107. printf("%.6lf", (double)ans);
  108. return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement