This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll nxt(ll a, char ch)
{
if (ch == '1') return 2 * a;
if (ch == '2') return 2 * a + 1;
if (ch == 'U') return a / 2;
if (ch == 'L') return a - 1;
if (ch == 'R') return a + 1;
assert(0);
}
ll nxt(ll a, string s)
{
for (auto &ch : s)
{
a = nxt(a, ch);
}
return a;
}
int get_level(ll x)
{
if (x == 1)
{
return 1;
}
else
{
assert(x >= 2);
return 1 + get_level(x / 2);
}
}
ll solve(ll a, ll b)
{
if (a == b)
{
return 0;
}
if (get_level(b) > get_level(a))
{
return 1 + solve(a, b / 2);
}
if (get_level(a) > get_level(b))
{
return 1 + solve(a / 2, b);
}
assert(get_level(a) == get_level(b));
return min(abs(a - b), 2 + solve(a / 2, b / 2));
}
int main()
{
#ifdef ONPC
freopen ("input.txt", "r", stdin);
#endif // ONPC
#ifndef ONPC
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#endif // ONPC
string s, t;
cin >> s >> t;
ll a = nxt(1, s);
ll b = nxt(1, t);
cout << solve(a, b) << "\n";
return 0;
}
/**
**/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |