AtCoder Beginner Contest 157
Posted kanoon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AtCoder Beginner Contest 157相关的知识,希望对你有一定的参考价值。
比赛链接:https://atcoder.jp/contests/abc157
A - Duplex Printing
题意
计算 $n$ 页的文档双面打印要用多少张纸。
题解
答案即 $lceil frac{n}{2} ceil$ 。
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n; cin >> n;
cout << (n + 1) / 2;
}
B - Bingo
题意
给出一个 $3 imes3$ 的方格,方格中的数互不相同,给出 $n$ 个互不相同的数,判断其中在方格中出现的数是否位于方格的同一行、或同一列、或同一对角线中。
题解
模拟即可。
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int, pair<int, int>> mp;
int a[3][3] = {};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cin >> a[i][j];
mp[a[i][j]] = {i, j};
}
}
int row[3] = {};
int col[3] = {};
int diago[3] = {};
int n; cin >> n;
for (int i = 0; i < n; i++) {
int x; cin >> x;
if (mp.count(x)) {
++row[mp[x].first];
++col[mp[x].second];
if (mp[x].first == mp[x].second)
++diago[0];
if (mp[x].first + mp[x].second == 2)
++diago[1];
}
}
bool ok = false;
for (int i = 0; i < 3; i++) {
ok |= row[i] == 3;
ok |= col[i] == 3;
ok |= diago[i] == 3;
}
cout << (ok ? "Yes" : "No");
}
C - Guess The Number
题意
输出一个 $n$ 位长的最小数,要求每一指定位都为指定数字,除了 $0$ 以外不可以出现前导零。
题解
模拟即可。
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m; cin >> n >> m;
bool ok = true;
string ans(n, ‘0‘);
bool used[n] = {};
for (int i = 0; i < m; i++) {
int s; cin >> s;
char c; cin >> c;
if (!used[s - 1]) {
ans[s - 1] = c;
used[s - 1] = true;
} else if (ans[s - 1] != c) {
ok = false;
}
}
if (n > 1 and ans[0] == ‘0‘) {
if (used[0]) ok = false;
else ans[0] = ‘1‘;
}
cout << (ok ? ans : "-1");
}
D - Friend Suggestions
并查集,待填。
以上是关于AtCoder Beginner Contest 157的主要内容,如果未能解决你的问题,请参考以下文章
AtCoder Beginner Contest 115 题解