⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sgu335.cpp

📁 SGU335题解。一道要考虑一些情况的题目。CPP程序。
💻 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 + -