zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 197(Sponsored by Panasonic) Person Editorial

    A - Rotate

    先输出第二和第三个字符,然后再输出第一个字符即可

    B - Visibility

    ((x,y)) 作为起点向4个方向探索不是 # 的点,注意一下会在((x,y))重复计算 (3) 次,所以要 cnt - 3

    int main() {
        ios_base::sync_with_stdio(false), cin.tie(0);
        int H, W, X, Y;
        cin >> H >> W >> X >> Y;
        X -= 1, Y -= 1;
        vector<string> s(H);
        for (int i = 0; i < H; ++i) cin >> s[i];
        int cnt = 0;
        // 向 4 个方向探索
        for (int i = X; i < H and s[i][Y] != '#'; ++i) cnt++;
        for (int i = X; i >= 0 and s[i][Y] != '#'; --i) cnt++;
        for (int i = Y; i < W and s[X][i] != '#'; ++i) cnt++;
        for (int i = Y; i >= 0 and s[X][i] != '#'; --i) cnt++;
        cout << cnt - 3 << "
    ";
        return 0;
    }
    

    C - ORXOR Editorial

    Good,位运算典型题

    int main() {
        ios_base::sync_with_stdio(false), cin.tie(0);
        int n;
        cin >> n;
        vector<int> a(n);
        for (int& x : a) cin >> x;
        int ans = INT_MAX;
        for (int i = 0; i < (1 << (n - 1)); ++i) {
            int xored = 0, ored = 0;
            for (int j = 0; j <= n; ++j) {
                if (j < n) ored |= a[j];
                if (j == n || (i >> j & 1)) xored ^= ored, ored = 0;
            }
            ans = min(ans, xored);
        }
        cout << ans << "
    ";
        return 0;
    }
    

    D - Opposite

    // C++似乎内置了 PI 也可以不定义 M_PI
    #define M_PI 3.14159265358979323846
    int main() {
        ios_base::sync_with_stdio(false), cin.tie(0);
        int N;
        double xx, yy, x, y;
        cin >> N >> xx >> yy >> x >> y;
        double a = (xx + x) / 2, b = (yy + y) / 2;
        xx -= a, yy -= b;
        double m = xx * cos(2 * M_PI / N) - yy * sin(2 * M_PI / N);
        double n = xx * sin(2 * M_PI / N) + yy * cos(2 * M_PI / N);
        cout << fixed << setprecision(12) << m + a << "
    " << n + b;
        return 0;
    }
    

    E - Traveler

    很好的处理方法

    #include <bits/stdc++.h>
    using namespace std;
    using ll = long long;
    const int N = 2e5 + 7;
    vector<int> v[N];
    ll l[N], r[N];
    int main() {
        ios_base::sync_with_stdio(false), cin.tie(0);
        int n;
        cin >> n;
        for (int i = 0, x, c; i < n; ++i) {
            cin >> x >> c;
            v[c].push_back(x);
        }
        v[0].push_back(0);
        v[n + 1].push_back(0);
    
        // int ans = 0;
        for (int i = 1, j = 0; i <= n + 1; ++i) {
            if (v[i].empty()) continue;
            sort(v[i].begin(), v[i].end());
            int lx = v[i].front(), rx = v[i].back();
            int ly = v[j].front(), ry = v[j].back();
            // cout << lx << " " << rx << "
    ";
            l[i] = min(abs(rx - ly) + l[j], abs(rx - ry) + r[j]) + rx - lx;
            r[i] = min(abs(lx - ly) + l[j], abs(lx - ry) + r[j]) + rx - lx;
            // ans = min(l[i], r[i]);
            j = i;
        }
    
        cout << min(l[n + 1], r[n + 1]) << "
    ";
        return 0;
    }
    

    F - Construct a Palindrome

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1002;
    int n, m;
    char s[2];
    struct node {
        int s, t, sp;
    } r;
    queue<node> q;
    vector<int> a[N][26];
    int ans = 1e9, vis[N][N];
    //把边看成点
    //对于两对边(a,b)  (c,d)
    //如果(a,c) 和 (b,c)之间存在边 而且边上的字母相同的话
    //那么这两个边变成的点就可以联通
    int bfs() {
        while (!q.empty()) {
            r = q.front();
            q.pop();
            if (r.sp == ans) return ans << 1;
            for (int i = 0; i < 26; ++i)
                for (int j = 0; j < a[r.s][i].size(); ++j)
                    for (int k = 0; k < a[r.t][i].size(); ++k) {
                        int ns = a[r.s][i][j];
                        int nt = a[r.t][i][k];
                        if (ns == r.t || nt == r.s) return r.sp << 1 | 1;
                        if (ns == nt) ans = r.sp + 1;
                        if (vis[ns][nt]) continue;
                        vis[ns][nt] = 1;
                        q.push((node){ns, nt, r.sp + 1});
                    }
        }
        return -1;
    }
    int main() {
        scanf("%d%d", &n, &m);
        for (int x, y; m; --m) {
            scanf("%d%d%s", &x, &y, s);
            a[x][*s - 'a'].push_back(y);
            a[y][*s - 'a'].push_back(x);
        }
        vis[1][n] = 1;
        q.push((node){1, n, 0});
        printf("%d", bfs());
    }
    

    The desire of his soul is the prophecy of his fate
    你灵魂的欲望,是你命运的先知。

  • 相关阅读:
    纸牌排序
    将年份转换成天干地支
    猜算式
    字符串的简单处理
    九宫格填数字
    扫雷
    嗨喽
    Input.GetAxis与Input.GetAxisRaw区别
    C#中(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别
    开发游戏所需知识(知乎转载)
  • 原文地址:https://www.cnblogs.com/RioTian/p/14590652.html
Copyright © 2011-2022 走看看