マイナビプログラミングコンテスト 2021(AtCoder Beginner Contest 201) の A/B/C 問題の解法 #ABC201
2024-02-14マイナビプログラミングコンテスト 2021(AtCoder Beginner Contest 201) の A/B/C 問題の解法。
実装はこちら atcoder/abc/201-300/201 · michimani/atcoder 。
A - Tiny Arithmetic Sequence
与えられる 3 つの整数を配列に保持してソートし、隣り合う 2 つの差が等しいかどうかを判定する。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using ui = unsigned int;
int main()
{
vector<ui> a(3, 0);
for (auto &aa : a)
{
cin >> aa;
}
sort(a.begin(), a.end());
cout << (a[2] - a[1] == a[1] - a[0] ? "Yes" : "No") << endl;
return 0;
}
提出 #50269193 - マイナビプログラミングコンテスト 2021(AtCoder Beginner Contest 201)
B - Do you know the second highest mountain?
B - Do you know the second highest mountain?
それぞれの山の高さはすべて相異なることが保証されているので、 \(T_i\) を key 、 \(S_i\) を value として map に保持し、その中で 2 番目に大きい値を取得する。
C++ の std:map
は key の昇順でソートされているので、 ++m.rbegin()
で 2 番目に大きい値を取得できる。
#include <iostream>
#include <map>
using namespace std;
using ui = unsigned int;
int main()
{
ui n;
cin >> n;
map<ui, string> ts;
for (; n--;)
{
string s;
ui t;
cin >> s >> t;
ts[t] = s;
}
cout << (++ts.rbegin())->second << endl;
return 0;
}
提出 #50269460 - マイナビプログラミングコンテスト 2021(AtCoder Beginner Contest 201)
C - Secret Number
o
となっている数字は すべて 使用されること、桁数が \(4\) であることから、考えられるすべての組み合わせについて o
となっている数字がすべて使用されているものを数える方法で解ける。
その際、 以下のどちらかの場合は \(0\) 通りとなるので早期リターンできる。
o
が \(5\) 個以上あるo
と?
の合計数が \(0\) である。
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
using ui = unsigned int;
int main()
{
vector<char> in, all;
ui pr = 0;
for (ui i = 0; i < 10; i++)
{
char c;
cin >> c;
if (c == 'o')
{
in.push_back(char(i - '0'));
all.push_back(char(i - '0'));
}
else if (c == '?')
{
pr++;
all.push_back(char(i - '0'));
}
}
if (in.size() > 4 || (in.size() + pr == 0))
{
cout << 0 << endl;
return 0;
}
vector<string> sv;
string tmp = "";
ui ans = 0;
bool ok = false;
for (auto &d1 : all)
{
for (auto &d2 : all)
{
for (auto &d3 : all)
{
for (auto &d4 : all)
{
tmp = {d1, d2, d3, d4};
ok = true;
for (auto &i : in)
{
if (tmp.find(i) == string::npos)
{
ok = false;
break;
}
}
ans += ui(ok);
}
}
}
}
cout << ans << endl;
return 0;
}
提出 #50268856 - マイナビプログラミングコンテスト 2021(AtCoder Beginner Contest 201)
comments powered by Disqus