📄 sgu335.cpp
字号:
#include <cctype>#include <iostream>#include <algorithm>using namespace std;typedef long long Int64;const Int64 inf = 1000000000000000LL;const int dire[4][2] = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};int H, W, r1, c1, r2, c2;char start;inline bool Outside(int x, int y) { return x < 0 || y < 0 || x >= H || y >= W;}Int64 Calc(int H, int W, int r1, int c1, int r2, int c2) { if (c1 < c2) { c1 = W - 1 - c1; c2 = W - 1 - c2; } if (r1 < r2) { r1 = H - 1 - r1; r2 = H - 1 - r2; } if (c1 - c2 > r1 - r2) { swap(r1, c1); swap(r2, c2); swap(H, W); } if (r1 == r2 && c1 == c2) return 0; if (W == 1) { //cout << r2 << " " << r1 << endl; Int64 res = 0; res += r2 * 2; r1 -= r2; r2 = 0; int ss; if (r1 > 5) { ss = (r1 - 5) / 2; res += ss * 4; r1 -= ss * 2; } //cout << r1 << endl; while (r1 != r2) { res++; if (r2 == 0) r2++; else r2--; if (r1 == r2) break; res++; r1--; if (r1 == r2) break; } return res; } if (((r1 - r2) + (c1 - c2)) & 1) return inf; Int64 res1 = 0, res2 = 0; //cout << r1 << " " << c1 << " " << r2 << " " << c2 << endl; //cout << H << " " << W << endl; int rr1 = r1, cc2 = c2; if (c1 > 0) { res1 = 0; if (c1 == c2) { res1 += 2; c2--; r1--; } res1 += (c1 - c2 - 1) * 2; r1 -= c1 - c2 - 1; c2 = c1 - 1; res1 += (r1 - r2 - 1) * 2; res1 += (r2 + c2) * 2; res1 += 2; } r1 = rr1; c2 = cc2; if (c1 + 1 < W) { res2 = 0; res2 += (c1 - c2) * 2; r1 -= c1 - c2; c2 = c1; if (r1 == r2) return res1; res2 += 2; c2++; r1--; //cout << r1 - r2 - 1 << endl; res2 += (r1 - r2 - 1) * 2; res2 += (r2 + W - 1 - c2) * 2; res2 += 2; } //cout << res1 << " " << res2 << endl; return max(res1, res2);}int main() { int i, rr, cc; Int64 ans; while (cin >> H >> W) { cin >> r1 >> c1 >> r2 >> c2; r1--; c1--; r2--; c2--; if ((r1 == r2 && c1 == c2) || Outside(r1, c1) || Outside(r2, c2)) for (; ; ); cin >> start; if (toupper(start) == 'C') { ans = inf; for (i = 0; i < 4; i++) { rr = r1 + dire[i][0]; cc = c1 + dire[i][1]; if (Outside(rr, cc)) continue; ans = min(ans, Calc(H, W, rr, cc, r2, c2)); } if (ans == inf) cout << 0 << endl; else cout << ans + 1 << endl; } else { ans = Calc(H, W, r1, c1, r2, c2); if (ans == inf) cout << 0 << endl; else cout << ans << endl; } } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -