AtCoder が提供しているABC(AtCoder Beginner Contest)368 C問題をC++とPythonで解いてみました。ABC368は、2024年8月24日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
C問題 Triple Attack(Difficulty : 368)
問題の詳細は、リンク先をご覧ください。
3回の操作を組で考えて、余った分を個別処理します。AtCoder Problems による Difficulty は 368 でした。
解答案
3回連続で操作をすれば、体力は、
C++ プログラム例(ABC368C)
体力を 5 で割った商に 3 を掛けて、組として行う操作の回数を求めます(17、19行目)。5 で割った余りは、
以下が、C++プログラムです。
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
int main()
{
int n;
cin >> n;
vector<int> h(n);
for (int i = 0; i < n; ++i) {
cin >> h[i];
}
ll t = 0;
for (int i = 0; i < n; ++i) {
int q = h[i] / 5;
int r = h[i] % 5;
t += 3 * q;
while (r > 0) {
++t;
if (t % 3 == 0) {
r -= 3;
} else {
r -= 1;
}
}
}
cout << t << endl;
return 0;
}
AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC368C)
Python版も基本的な考え方は同じです。以下がプログラムです。
"""AtCoder Beginner Contest 368 C"""
n = int(input())
h = list(map(int, input().split()))
t = 0
for i in range(n):
q = h[i] // 5
r = h[i] % 5
t += 3 * q
while r > 0:
t += 1
if t % 3 == 0:
r -= 3
else:
r -= 1
print(t)
こちらも「AC」と判定されました。
最後に
コンテストでACすることができましたが、見通しが悪いプログラムを書いていました。公式解説などを参考にして書き換えたプログラムを紹介しました。
引き続き ABC の問題を紹介していきます。