AtCoder が提供しているABC(AtCoder Beginner Contest)331 のA問題をC++とPythonで解いてみました。ABC331は、2023年12月2日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
A問題 Tomorrow(Difficulty : 25)
問題はリンク先をご覧ください。
日、月、年の順番で処理します。AtCoder Problems による Difficulty は 25 でした。
解答案
C++ プログラム例(ABC331A)
次の日を求める問題です。年末(入力例1)と月末に特別な処理が必要なことが分かります。
次のように日→月→年の順番で処理します。
- 次の日が月末の日を超えていたら、日を1日にして月を増やす。
- 上の処理後の月が年末の月を超えていたら、月を1月にして年を増やす。
以下が、C++プログラムとなります。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int M, D;
cin >> M >> D;
int y, m, d;
cin >> y >> m >> d;
++d;
if (d > D) {
d = 1;
++m;
}
if (m > M) {
m = 1;
++y;
}
cout << y << " " << m << " " << d << endl;
return 0;
}
AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC331A)
Python 版も基本的な考え方は同じです。以下となります。
"""AtCoder Beginner Contest 331 A"""
M, D = map(int, input().split())
y, m, d = map(int, input().split())
d += 1
if d > D:
d = 1
m += 1
if m > M:
m = 1
y += 1
print(y, m, d)
こちらも「AC」と判定されました。
最後に
今回(ABC331)のA問題は、判定の順番に少し工夫が必要でした。ただし、入力例で年末の日が例に挙げられているなどの初級者向けの誘導がされていました。
引き続き ABC の問題を紹介していきます。