東京海上日動プログラミングコンテスト2023(AtCoder Beginner Contest 299) #ABC299
2024-01-08東京海上日動プログラミングコンテスト2023(AtCoder Beginner Contest 299) の A/B/C 問題の解法。
実装はこちら atcoder/abc/201-300/299 · michimani/atcoder 。
A - Treasure Chest
\(S\) を一文字ずつ読み込んでいき、 |
の数をカウントする。読み込んだ文字が *
のとき、 |
の数が \(1\) であれば in
を出力して終了。それ以外であれば out
を出力して終了する。
#include <iostream>
using namespace std;
using ui = unsigned int;
int main()
{
ui n;
cin >> n;
ui bc = 0;
for (ui i = 0; i < n; i++)
{
char c;
cin >> c;
if (c == '|')
{
bc++;
continue;
}
if (c == '*')
{
if (bc == 1)
{
cout << "in" << endl;
}
else
{
cout << "out" << endl;
}
return 0;
}
}
// noop
return 0;
}
提出 #49148908 - 東京海上日動プログラミングコンテスト2023(AtCoder Beginner Contest 299)
B - Trick Taking
\(C\) ごとにプレイヤーをグループ化して、 \(T\) に属するプレイヤーがいればそのグループ内で、いなければ \(C_1\) のグループ内で最大の値を出しているプレイヤーの番号を出力する。
プレイヤーを表す構造体 Player
を定義して、フィールドとして \(i, C_i, R_i\) を保持する。
\(C\) ごとのグループ化は map<ui, vector<Player>>
で行う。
\(T\) または \(C_1\) グループの vector<Player>
を Player.r
で降順にソートして、先頭のプレイヤーの番号を出力する。
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
using ui = unsigned int;
struct Player
{
ui no;
ui c;
ui r;
};
bool comp(Player &l, Player &r)
{
return l.r < r.r;
}
int main()
{
ui n, t;
cin >> n >> t;
vector<Player> p(n);
map<ui, vector<Player>> cp;
for (ui i = 0; i < n; i++)
{
ui c;
cin >> c;
p[i].no = i + 1;
p[i].c = c;
}
for (ui i = 0; i < n; i++)
{
ui r;
cin >> r;
p[i].r = r;
}
for (auto &pp : p)
{
cp[pp.c].push_back(pp);
}
if (cp.count(t) == 0)
{
t = p[0].c;
}
vector<Player> cand = cp[t];
sort(cand.rbegin(), cand.rend(), comp);
cout << cand[0].no << endl;
return 0;
}
提出 #49148828 - 東京海上日動プログラミングコンテスト2023(AtCoder Beginner Contest 299)
C - Dango
\(S\) を一文字ずつ読み込んで、 o
が連続する数をカウントする。読み込んが文字が -
且つその時点での o
の数が \(1\) 以上の場合、連続する o
の数を保持する配列に追加し、 o
のカウントを \(0\) にする。
\(S\) の最後が o
の場合に備えて、読み込みのループが抜けたあとで o
のカウントが \(1\) 以上 且つ \(N\) 未満の場合は、連続する o
の数を保持する配列に追加する。
配列の要素数が \(0\) の場合は -1
を出力して終了。
配列の要素数が \(1\) 以上の場合は、配列を降順でソートして \(0\) 番目の要素を出力して終了。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using ui = unsigned int;
int main()
{
ui n;
cin >> n;
vector<ui> dc;
ui d = 0;
for (ui i = 0; i < n; i++)
{
char c;
cin >> c;
if (c == 'o')
{
d++;
}
else if (c == '-' && d > 0)
{
dc.push_back(d);
d = 0;
}
}
if (0 < d && d < n)
{
dc.push_back(d);
}
sort(dc.rbegin(), dc.rend());
if (dc.size() == 0)
{
cout << "-1" << endl;
return 0;
}
cout << dc[0] << endl;
return 0;
}
提出 #49148005 - 東京海上日動プログラミングコンテスト2023(AtCoder Beginner Contest 299)
comments powered by Disqus