ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AtCoder Beginner Contest 168

2020-05-17 22:05:00  阅读:258  来源: 互联网

标签:AtCoder 题意 Beginner int cin que mp 168 include


比赛链接: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)

题意

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

题解

余弦定理。

代码

#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 就好了。

代码

#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 100;
vector<int> e[N];
bool vis[N];
int fa[N];

void bfs() {
    queue<int> que;
    que.push(1);
    vis[1] = true;
    while (!que.empty()) {
        int u = que.front();
        que.pop();
        for (auto v : e[u]) {
            if (!vis[v]) {
                fa[v] = u;
                que.push(v);
                vis[v] = true;
            }
        }
    }
}

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" << "\n";
    for (int i = 2; i <= n; i++) {
        cout << fa[i] << "\n";
    }
}

 

标签:AtCoder,题意,Beginner,int,cin,que,mp,168,include
来源: https://www.cnblogs.com/Kanoon/p/12907101.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有