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

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

    A - ∴ (Therefore)

    题意

    给出一个由数字组成的字符串 $s$,要求如下:

    • 如果 $s$ 以 2,4,5,7,9 结尾,输出 "hon"
    • 如果 $s$ 以 0,1,6,8 结尾,输出 "pon"
    • 如果 $s$ 以 3 结尾,输出 "bon"

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        map<char, string> mp;
        mp['2'] = mp['4'] = mp['5'] = mp['7'] = mp['9'] = "hon";
        mp['0'] = mp['1'] = mp['6'] = mp['8'] = "pon";
        mp['3'] = "bon";
        string s; cin >> s;
        cout << mp[s.back()];
    }

    B - ... (Triple Dots)

    题意

    给出正整数 $n$ 和字符串 $s$,如果字符串的长度大于 $n$,输出字符串的前 $n$ 个字符和 "...",否则输出原字符串。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int n; cin >> n;
        string s; cin >> s;
        cout << s.substr(0, n) << (s.size() > n ? "..." : "");
    }

    C - : (Colon)

    题意

    已知钟表上时针分针的长度,输出某时刻二者末端的距离。

    题解

    余弦定理,全部换算为分钟计算夹角即可。

    Tips

    时针并不总是指向整点,还会随着分针偏移。

    代码

    #include <bits/stdc++.h>
    #define PI acos(-1)
    using namespace std;
    int main() {
        double a, b, h, m; cin >> a >> b >> h >> m;
        double a1 = abs(5.0 * (h + m / 60.0) - m);
        double a2 = 60.0 - a1;
        double a3 = 2.0 * PI * min(a1, a2) / 60.0;
        printf("%.9f", sqrt(a * a + b * b - 2 * a * b * cos(a3)));
    }

    D - .. (Double Dots)

    题意

    给出一个图,在每个端点处树立一个指向牌,使得从每个端点出发沿指向牌走到端点 $1$ 的路程最短。

    题解

    最短路问题,bfs 下就好了。

    Tips

    图中可能有环,所以不能用 dfs 写。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 2e5 + 100;
    vector<int> e[N];
    int fa[N];
    
    void bfs() {
        queue<int> que;
        que.push(1);
        fa[1] = 1;
        while (!que.empty()) {
            int u = que.front();
            que.pop();
            for (auto v : e[u]) {
                if (fa[v] == 0) {
                    que.push(v);
                    fa[v] = u;
                }
            }
        }
    }
    
    int main() {
        int n, m; cin >> n >> m;
        for (int i = 0; i < m; i++) {
            int u, v; cin >> u >> v;
            e[u].push_back(v);
            e[v].push_back(u);
        }
        bfs();
        for (int i = 2; i <= n; i++) {
            if (fa[i] == 0) {
                cout << "No";
                return 0;
            }
        }
        cout << "Yes" << "
    ";
        for (int i = 2; i <= n; i++) {
            cout << fa[i] << "
    ";
        }
    }
  • 相关阅读:
    模糊查询与索引
    weblogic 域的创建
    undo表空间缩小
    weblogic安装
    C#学习笔记——枚举类型
    C#学习笔记——windows窗体
    Qt之主窗口设计——打印图像
    C#学习笔记——MDI窗体(多文档界面)
    C#学习笔记——抽象类和抽象方法
    C#学习笔记——Main方法
  • 原文地址:https://www.cnblogs.com/Kanoon/p/12907101.html
Copyright © 2011-2022 走看看