zoukankan      html  css  js  c++  java
  • Hello 2022 AE

    博客地址

    视频版讲解

    A. Stable Arrangement of Rooks

    贪心

    #include <bits/stdc++.h>
    using namespace std;
    #define inc(x, l, r) for (int x = l; x <= r; x++)
    
    void solve() {
        int n, x;
        cin >> n >> x;
        if ((n + 1) / 2 < x) {
            cout << "-1\n";
        } else {
            inc(i, 1, n) {
                inc(j, 1, n) {
                    if ((i & 1) && (i + 1) / 2 <= x && i == j)
                        cout << 'R';
                    else
                        cout << '.';
                }
                cout << '\n';
            }
        }
    }
    
    int main() {
        int T;
        cin >> T;
        while (T--) {
            solve();
        }
    }
    
    

    B. Integers Shop

    分类, 模拟

    #include <bits/stdc++.h>
    using namespace std;
    #define inc(x, l, r) for (int x = l; x <= r; x++)
    
    const int inf = INT_MAX;
    
    void solve() {
        int n, l, r, c1, c2;
        cin >> n >> l >> r >> c1;
        c2 = c1;
        int Cost = c1;
        cout << Cost << "\n";
        inc(i, 2, n) {
            int x, y, c;
            cin >> x >> y >> c;
            int f = 0;
            if (x < l) {
                c1 = c;
                l = x;
                f = 1;
            } else if (x == l) {
                c1 = min(c1, c);
            }
            if (y > r) {
                c2 = c;
                r = y;
                f = 1;
            } else if (y == r) {
                c2 = min(c2, c);
            }
            if (f) {
                if (l == x && r == y) {
                    Cost = c;
                } else {
                    Cost = inf;
                }
            } else {
                if (l == x && r == y) {
                    Cost = min(Cost, c);
                }
            }
            cout << min(Cost, c1 + c2) << "\n";
        }
    }
    
    int main() {
        int T;
        cin >> T;
        while (T--) {
            solve();
        }
    }
    
    

    C. Hidden Permutations

    置换, 环

    #include <bits/stdc++.h>
    using namespace std;
    #define inc(x, l, r) for (int x = l; x <= r; x++)
    
    const int maxn = 1e6 + 5;
    
    int r[maxn];
    
    void solve() {
        int n;
        cin >> n;
        inc(i, 1, n) r[i] = 0;
        int x;
        inc(i, 1, n) {
            if (!r[i]) {
                vector<int> v;
                while (1) {
                    cout << "? " << i << "\n";
                    cout.flush();
                    cin >> x;
                    if (x == i)
                        break;
                }
                while (1) {
                    cout << "? " << i << "\n";
                    cout.flush();
                    cin >> x;
                    v.push_back(x);
                    if (x == i)
                        break;
                }
                v.push_back(v[0]);
                int p = i;
                inc(i, 0, (int)v.size() - 2) {
                    r[p] = v[i];
                    p = v[i];
                }
            }
        }
        cout << "!";
        inc(i, 1, n) cout << " " << r[i];
        cout << "\n";
    }
    
    int main() {
        int T;
        cin >> T;
        while (T--) {
            solve();
        }
    }
    
    

    D. The Winter Hike

    镜像, 思维

    #include <bits/stdc++.h>
    using namespace std;
    #define inc(x, l, r) for (int x = l; x <= r; x++)
    #define ll long long
    
    const int maxn = 1e3 + 5;
    
    int a[maxn][maxn];
    
    void solve() {
        int n;
        cin >> n;
        inc(i, 1, 2 * n) inc(j, 1, 2 * n) cin >> a[i][j];
        ll res = 0;
        inc(i, 1, n) inc(j, 1, n) res += a[i + n][j + n];
        cout << res + min({a[n][2 * n], a[n + 1][1], a[n][n + 1], a[n + 1][n],
                           a[1][2 * n], a[2 * n][1], a[1][n + 1], a[2 * n][n]})
             << "\n";
    }
    
    int main() {
        int T;
        cin >> T;
        while (T--) {
            solve();
        }
    }
    
    

    E. New School

    二分, 前缀和/线段树

    #include <bits/stdc++.h>
    using namespace std;
    #define inc(x, l, r) for (int x = l; x <= r; x++)
    #define dec(x, l, r) for (int x = l; x >= r; x--)
    #define ll long long
    #define pii pair<int, int>
    #define fi first
    #define se second
    
    const int maxn = 1e6 + 5;
    
    int a[maxn], val[maxn], suf[maxn];
    vector<int> b[maxn];
    pii st[maxn];
    ll pre[maxn], T[maxn];
    
    ll sum(int l, int r) {
        if (l > r)
            return 0;
        return pre[r] - pre[l - 1];
    }
    
    void solve() {
        int n, m;
        cin >> n >> m;
        inc(i, 1, n) cin >> a[i];
        inc(i, 1, m) {
            int k;
            cin >> k;
            b[i].resize(k);
            inc(j, 0, k - 1) cin >> b[i][j];
            T[i] = 0;
            inc(j, 0, k - 1) T[i] += b[i][j];
            val[i] = (T[i] + k - 1) / k;
        }
        inc(i, 1, m) st[i] = {val[i], 1};
        inc(i, 1, n) st[m + i] = {a[i], 2};
        sort(st + 1, st + n + m + 1);
        suf[n + m + 1] = 0;
        int r = 1;
        dec(i, n + m, 1) {
            if (st[i].se == 2)
                suf[i] = suf[i + 1] + 1;
            else
                suf[i] = suf[i + 1] - 1;
            if (suf[i] == -1)
                r = min(r, 0);
            if (suf[i] < -1)
                r = min(r, -1);
        }
        if (r == -1) {
            inc(i, 1, m) for (auto e : b[i]) cout << '0';
            cout << "\n";
            inc(i, 1, m) b[i].clear();
            return;
        }
    
        pre[0] = 0;
        if (r) {
            inc(i, 1, n + m + 1) pre[i] = pre[i - 1] + (int)(suf[i] == 0);
        } else {
            inc(i, 1, n + m + 1) pre[i] = pre[i - 1] + (int)(suf[i] == -1);
        }
        inc(i, 1, m) for (auto e : b[i]) {
            if (r) {
                int rf = (T[i] - e + b[i].size() - 2) / (b[i].size() - 1);
                if (rf <= val[i]) {
                    cout << 1;
                    continue;
                }
                int r = lower_bound(st + 1, st + n + m + 1, pii(rf, 0)) - st;
                int l = lower_bound(st + 1, st + n + m + 1, pii(val[i], 0)) - st;
                if (sum(l + 1, r))
                    cout << 0;
                else
                    cout << 1;
            } else {
                int rf = (T[i] - e + b[i].size() - 2) / (b[i].size() - 1);
                if (rf >= val[i]) {
                    cout << 0;
                    continue;
                }
                int l = lower_bound(st + 1, st + n + m + 1, pii(rf, 0)) - st;
                int r = lower_bound(st + 1, st + n + m + 1, pii(val[i], 0)) - st;
                if (sum(l + 1, r) == sum(1, n + m + 1))
                    cout << 1;
                else
                    cout << 0;
            }
        }
        cout << "\n";
        inc(i, 1, m) b[i].clear();
    }
    
    int main() {
        int T;
        cin >> T;
        while (T--) {
            solve();
        }
    }
    
    
  • 相关阅读:
    python_Memcached
    python_day10_IO多路复用
    java_list,set,map集合
    python3.0_day9_scoket基础之篇
    redis.conf配置文件详解
    Java_数组
    面向接口编程初识(转)
    SSH三种框架及表示层、业务层和持久层的理解(转)
    解决win10磁盘占用过大的问题(亲测有效)
    ORA-12541:TNS:无监听程序
  • 原文地址:https://www.cnblogs.com/linqi05/p/15764952.html
Copyright © 2011-2022 走看看