zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 166

    比赛链接:https://atcoder.jp/contests/abc166/tasks

    A - A?C

    题意

    AtCoder 会轮流举行 ABC,ARC 两种类型的比赛,已知上一次举行的比赛类型,问这一次会举行哪一种比赛。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        string s; cin >> s;
        cout << (s == "ABC" ? "ARC" : "ABC");
    }

    B - Trick or Treat

    题意

    有 $n$ 个人,$k$ 种小吃,每种小吃有 $d_i$ 个人拥有,找出有多少人一个小吃也没有。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int n, k; cin >> n >> k;
        int cnt[105] = {};
        for (int i = 0; i < k; i++) {
            int d; cin >> d;
            for (int j = 0; j < d; j++) {
                int x; cin >> x;
                ++cnt[x];
            }
        }
        int ans = 0;
        for (int i = 1; i <= n; i++) ans += cnt[i] == 0;
        cout << ans;
    }

    C - Peaks

    题意

    有 $n$ 个天文台和 $m$ 条路,每个天文台有一个所在的海拔高度,如果一个天文台所在的海拔高度比和它相邻的所有天文台高,我们称之为一个好天文台,如果一个天文台不与其他天文台相邻,我们也称之为一个好天文台,求出好天文台的总数。

    题解

    因为只考虑相邻的天文台,所以从每个点出发遍历即可。

    因为每条边会被遍历两遍,所以复杂度是 $O_{(2m)}$ 。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    const int M = 2e5 + 100;
    int h[M];
    vector<int> e[M];
    
    int bfs(int u) {
        for (int v : e[u])
            if (h[v] >= h[u]) return 0;
        return 1;
    }
    
    int main() {
        int n, m; cin >> n >> m;
        for (int i = 1; i <= n; i++) cin >> h[i];
        for (int i = 0; i < m; i++) {
            int u, v; cin >> u >> v;
            e[u].push_back(v);
            e[v].push_back(u);
        }
        int ans = 0;
        for (int i = 1; i <= n; i++) ans += bfs(i);
        cout << ans;
    }

    D - I hate Factorization

    题意

    给出 $x$,找出满足 $a^5-b^5=x$ 的 $a$ 和 $b$ 。

    题解

    移项得:$a^5=x+b^5$,所以可以枚举 $b^5$,判断 $x+b^5$ 是否也为某一个数的 $5$ 次方即可。

    代码

    #include <bits/stdc++.h>
    using LL = long long;
    using namespace std;
    map<LL, LL> mp;
    set<LL> st;
    int main() {
        for (LL i = -1000; i <= 1000; i++) {
            LL x = i * i * i * i * i;
            st.insert(x);
            mp[x] = i;
        }
        LL x; cin >> x;
        for (auto b : st) {
            if (st.find(x + b) != st.end()) {
                cout << mp[x + b] << ' ' << mp[b];
                return 0;
            }
        }
    }

    E - This Message Will Self-Destruct in 5s

    题意

    找出数组 $a$ 中有多少对 $j-i=a_j+a_i (j>i)$。

    题解

    移项得:$j-a_j=i+a_i$,即只需记录 $i+a_i$ 的个数,对于之后的每个 $j-a_j$ 加上之前出现过的 $i+a_i$ 的个数即可。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int n; cin >> n;
        map<int, int> mp;
        long long ans = 0;
        for (int i = 1; i <= n; i++) {
            int x; cin >> x;
            ans += mp[i - x];
            ++mp[i + x];
        }
        cout << ans;
    }

    F - Three Variables Game

    题意

    开始时有 $a,b,c$ 三个数,接下来有 $n$ 个操作,每个操作给出 $a,b,c$ 中的两个变量,可以选择给其中一个 +1,另一个 -1,问能否在 $n$ 个操作的过程中 $a,b,c$ 均能保持为非负数,输出方案。

    题解

    先贴一份DFS的代码(能过好像是因为反例较少)。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    const int M = 1e5 + 100;
    int n, a, b, c;
    string s[M];
    char ans[M];
    
    void dfs(int i, int a, int b, int c) {
        if (i == n) {
            cout << "Yes
    ";
            for (int i = 0; i < n; i++) cout << ans[i] << "
    ";
            exit(0);
        }
        if (s[i] == "AB") {
            if (a) ans[i] = 'B', dfs(i + 1, a - 1, b + 1, c);
            if (b) ans[i] = 'A', dfs(i + 1, a + 1, b - 1, c);
        }
        if (s[i] == "BC") {
            if (b) ans[i] = 'C', dfs(i + 1, a, b - 1, c + 1);
            if (c) ans[i] = 'B', dfs(i + 1, a, b + 1, c - 1);
        }
        if (s[i] == "AC"){
            if (a) ans[i] = 'C', dfs(i + 1, a - 1, b, c + 1);
            if (c) ans[i] = 'A', dfs(i + 1, a + 1, b, c - 1);
        }
    }
    
    int main() {
        cin >> n >> a >> b >> c;
        for (int i = 0; i < n; i++) cin >> s[i];
        dfs(0, a, b, c);
        cout << "No";
    }
  • 相关阅读:
    Appium遇到的问题二(持续更新....)
    开源unittest测试报告源码BSTestRunner.py
    Unittest + python
    python快速开发Web之Django
    Python基础(五) python装饰器使用
    Appium环境搭建(一)
    linux ssh 报错failed
    CentOS6.9快速安装配置svn
    python 购物车小程序
    连续三次登陆失败锁定账户
  • 原文地址:https://www.cnblogs.com/Kanoon/p/12823787.html
Copyright © 2011-2022 走看看