Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define F first
- #define S second
- using namespace std;
- using ll = long long int;
- using ii = pair<int, int>;
- using vi = vector<int>;
- using vii = vector<ii>;
- using graph = vector<vi>;
- const int MAXN = 2e3 + 5;
- const int INF = 0x3f3f3f3f;
- const int mod =998244853;
- int ord[] = {1, 2, 3};
- int x[4], y[4], xt[4], yt[4];
- bool work(int t, int a, int b, int at, int bt) {
- return abs(a-at)+ abs(b-bt) <= 2*t;
- }
- int bbin(int a, int b, int at, int bt, int w) {
- int ini = 1, fim = 3e5, mid, ans = INF;
- while (ini <= fim) {
- mid = ini + fim >> 1;
- if (work(mid,a ,b, at+mid*xt[w], bt+mid*yt[w])) {
- ans = mid;
- fim = mid-1;
- } else {
- ini = mid+1;
- }
- }
- return ans;
- }
- int main() {
- int n, m;
- int a, b;
- int ans, t;
- char c;
- while (scanf("%d %d", &n, &m) != EOF && n) {
- for (int i = 1; i<=3; ++i) {
- scanf("%d %d %c", &a, &b, &c);
- yt[i] = c == 'C';
- xt[i] = c == 'D';
- x[i] = a, y[i] = b;
- }
- ans = INF;
- do {
- ii last = {n, m};
- t = 0;
- for (int i = 0, w; i<3; ++i) {
- w = ord[i];
- t += bbin(last.F, last.S, x[w]+t*xt[w], y[w]+t*yt[w], w);
- last = {x[w]+t*xt[w], y[w]+t*yt[w]};
- }
- ans = min(ans, t);
- } while (next_permutation(ord, ord+3));
- printf("%d\n", ans);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement