はじめに
パナソニックグループ プログラミングコンテスト2025(AtCoder Beginner Contest 406/ABC406)に参加しましたので報告します。
概要
- 今回はA問題とB問題を解いた
- B問題は結果試行錯誤(4回WA/誤答)になってしまい、boost C++ライブラリの力を借りて何とかクリアした
- B問題の難度は高めで、ランキング・パフォーマンス共に大幅にアップした
結果
- パフォーマンス348
- レート変動:86→113(+27)
long longで対処できない問題がB問題に来たためか、順位は大幅にアップ、パフォーマンスは350近くまで跳ね上がりました。
ただし、それでも茶色の領域ではありません。やはり最低限C問題は解けないと入茶は厳しい、と。
今回はたまたまboost C++ライブラリのことを存じていたためどうにかなりましたが、次回もうまく行くとは限りません。
A - Not Acceptable
レポート提出時間の締切に間に合ったか否かを判定する(簡単な)問題です。
今回は分単位に変換した提出時間と締切時間を愚直に変数に入れてますが、省略することも可能です。
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b, c, d;
cin >> a >> b >> c >> d;
int dl = a * 60 + b;
int sb = c * 60 + d;
if (sb <= dl) cout << "Yes" << endl;
else cout << "No" << endl;
return 0;
}
B - Product Calculator
かけ算しか行えない、しかし表示桁数上限が非常に大きい電卓を再現する問題です。
long long(64ビット整数型)では入り切らないほど桁数が多いため、何かしらの工夫が必要です。
それを知らずに4回提出、WA(誤答)となってしまいました。
結局はboost C++ライブラリのmultiprecisionが利用できることを活用して、それを使ってクリアーしました。
(AtCoderではboost C++ライブラリが利用できることを思い出しました)
#include <bits/stdc++.h>
#include <boost/multiprecision/cpp_int.hpp>
using namespace std;
using ll = unsigned long long;
#define rep(i,n) for (ll i = 0; i < (n); i++)
int main() {
ll n, k;
cin >> n >> k;
boost::multiprecision::cpp_int d = 1;
boost::multiprecision::cpp_int lim = 1;
rep(i, k) lim *= 10;
for (ll i = 0; i < n; i++) {
ll a;
cin >> a;
d *= a;
if (d >= lim) {
d = 1;
}
}
cout << d << endl;
return 0;
}
今後の課題
- やはり数理素養が低い(忘れている)ので、その辺をどうにかする
- アルゴ式を進める(数理素養が学べる)
- アルゴ数学本を進める
- 高校数学の書籍で学習する
- 鉄則本を読む
なおAtCoder Daily Trainingはちょっと精神的余裕が無くなったことから一時休止しています。
その他
アルゴ式、学習記録回りで不具合出てますが、直らないかなあ、と。モチベーション的に。