ABC196
2021/3/20に開催されたAtCoder Beginner Contest 196の考え方をメモるエントリです。
A - Difference Max
なので、
であり、辺々足すと
となるので、の最大値はです。
B - Round Down
の最大値がととても大きいので、文字列で処理することを考え、
regex_replace(<元の文字列>, regex(<置換対象の正規表現>), <置換後の文字列>);
というメソッドがあるので、今回はこのようなコードになりました。
string s; cin >> s; s = regex_replace(s, regex("\\..*"), ""); cout << s << endl;
一つ目のバックスラッシュ\
で二つ目のバックスラッシュ自体をエスケープしているので、最終的に\..*
という正規表現を使っていることになります。
C - Doubled
を十進法で表した時、その前半と後半が等しいの個数を求めればよいので、「等しい前半と後半」に対して全探索を行いました。
ll n; cin >> n; int count = 0; for (int i = 1; true; i++) { string s = to_string(i) + to_string(i); ll x = stoll(s); if (x <= n) count++; else break; } cout << count << endl;
例えば、forループの中でi=13のとき、xは1313となります。