Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma comment(linker, "/STACK:10000000")
- #define _CRT_SECURE_NO_WARNINGS
- #define _CRT_SECURE_NO_DEPRECATE
- #include <cassert>
- #include <cstdio>
- #include <iostream>
- #include <sstream>
- #include <numeric>
- #include <bitset>
- #include <vector>
- #include <set>
- #include <string>
- #include <map>
- #include <cmath>
- #include <algorithm>
- #include <queue>
- #include <cstdlib>
- #include <functional>
- #include <cstring>
- #include <ctime>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef double ld;
- typedef vector<int> vi;
- typedef pair<int, int> pii;
- template <class T> T inline sqr(T x) { return x * x; }
- template <class T> string str( T i ) { stringstream ss; ss << i; return ss.str(); }
- int toint(string a) {istringstream is(a); int p; is>>p; return p;}
- long long toll(string a){istringstream is(a);long long p;is>>p;return p;}
- #define pb push_back
- #define mp make_pair
- #define e1 first
- #define e2 second
- #define sz size
- #if ( _WIN32 || __WIN32__ )
- #define LLD "%I64d"
- #else
- #define LLD "%lld"
- #endif
- #define forn(i, n) for (i = 0; i < int(n); i++)
- #define fornd(i, n) for (i = int(n - 1); i >= 0; i--)
- #define forv(i, a) for (i = 0; i < int(a.size()); i++)
- #define fors(i, a) for (i = 0; i < int(a.length()); i++)
- #define rep(i, st, fin) for (i = int(st); i < int(fin); i++)
- #define repd(i, st, fin) for (i = int(fin - 1); i >= int(st); i--)
- #define setval(a,v) memset(a, v, sizeof(a))
- const ld pi = 3.1415926535897932384626433832795, eps = 1e-8;
- ld d1[10][10], d2[10][10];
- int a[100500];
- const ld inf = 1000000000;
- ld r(int u, int v)
- {
- if (u == v)
- return 0.0;
- if (u > v)
- swap(u, v);
- ld res = 0;
- if (u == 0)
- {
- if (v % 3 == 2)
- return 3.0 - (v / 3);
- else
- return pow(sqr(3 - ((v - 1)/ 3)) + 1.0, 0.5);
- }
- res = pow(double(sqr((v - u) % 3)) + sqr((v - u) / 3), 0.5);
- return res;
- }
- int main()
- {
- freopen("fastdial.in", "r", stdin); freopen("fastdial.out", "w", stdout);
- string s;
- cin >> s;
- int i, j, k, n = s.length();
- forn (i, n)
- a[i] = s[i] - '0';
- int t = a[0], u;
- forn (i, 10)
- d1[t][i] = d1[i][t] = 0;
- forn (k, n - 1)
- {
- forn (i, 10)
- forn (j, 10)
- d2[i][j] = inf;
- t = a[k];
- u = a[k + 1];
- forn (i, 10)
- {
- d2[u][t] = d2[t][u] = min(d2[t][u], d1[t][i] + r(i, u));
- d2[i][u] = d2[u][i] = min(d2[i][u], d1[t][i] + r(t, u));
- }
- forn (i, 10)
- forn (j, 10)
- d1[i][j] = d2[i][j];
- }
- ld ans = inf;
- forn (i, 10)
- forn (j, 10)
- if (i == a[n - 1] || j == a[n - 1])
- ans = min(ans, d1[i][j]);
- printf("%.6lf", (double)ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement