Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- #define pii pair < int, int >
- #define fr first
- #define sc second
- #define int long long
- using namespace std;
- pii a, b;
- int n;
- string s;
- pii dif, cur;
- ll dist(pii A, pii B) {
- return abs(A.fr - B.fr) + abs(A.sc - B.sc);
- }
- bool check(ll mid) {
- ll x = mid / n;
- ll ost = mid % n;
- pii asd;
- asd = {x * dif.fr, x * dif.sc};
- for (int i = 0; i < ost; i++) {
- if (s[i] == 'R') asd.fr++;
- else if (s[i] == 'L') asd.fr--;
- else if (s[i] == 'U') asd.sc++;
- else asd.sc--;
- }
- return dist(b, asd) <= mid;
- }
- main() {
- scanf("%d %d", &a.fr, &a.sc);
- scanf("%d %d", &b.fr, &b.sc);
- b.fr -= a.fr;
- b.sc -= a.sc;
- a = {0, 0};
- scanf("%d", &n);
- cin >> s;
- dif = {0, 0};
- for (int i = 0; i < n; i++) {
- if (s[i] == 'R') dif.fr++;
- else if (s[i] == 'L') dif.fr--;
- else if (s[i] == 'U') dif.sc++;
- else dif.sc--;
- }
- ll l = 0;
- ll r = 1e18;
- while (r - l > 1) {
- ll mid = (l + r) >> 1;
- if (check(mid)) {
- r = mid;
- } else {
- l = mid;
- }
- }
- if (r == (ll)1e18) {
- cout << -1;
- return 0;
- }
- cout << r;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement