ABC168に参加しました
AtCoderのコンテストに参加した際の結果と考え方、反省点などを書いていきます。
コンテストページはこちら
解いた/挑んだ問題
A問題
問題の概要
3ケタの整数Nが与えられる。
Nの一の位が2,4,5,6,9の時'hon'と、0,1,6,8の時'pon'と、3の時'bon'と出力せよ
制約
- Nは999以下の正の整数
どのように考えたか
stringで受け取り、s.back()で末尾をとりifで比較する
結果
一回目は焦ってしまい2回目でAC
・提出ししたコード
#include"bits/stdc++.h" #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define REP(i, n) for (int i = 1; i < (int)(n); i++) using ll = long long; using namespace std; int main() { string s; cin >> s; char c = s.back(); string ans; if (c == '2' || c == '4' || c == '5' || c == '7' || c == '9')ans = "hon"; else if (c == '3')ans = "bon"; else ans = "pon"; cout << ans << endl; return 0; }
ベタ書きなので、改善がもしできるならしてみたい
ACまでの時間
ACしたのはコンテスト開始から24分後です。
B問題
問題の概要
文字列Sと数字Kが与えられる
Sの長さがK以下であればそのままSを出力し、
SがKより大きいときは、先頭K文字を切り出し、末尾に'...'をつけて出力せよ
制約
- Kは1以上100以下の整数
- Sは英小文字からなる文字列
- Sの長さは1以上100以下
どのように考えたか
S.size()をとり、比較してKを超えていたらsubstrで切り取り末尾に'...'を追加する
結果
一発AC
提出したコード
#include"bits/stdc++.h" #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define REP(i, n) for (int i = 1; i < (int)(n); i++) using ll = long long; using namespace std; int main() { string s; int n; cin >> n >> s; if (n >= s.size())cout << s << endl; else { string ans = s.substr(0, n) + "..."; cout << ans << endl; } return 0; }
比較的簡単な問題だったと思う substrで一度間違えたことがあるので少し怖かった
ACまでの時間
ACしたのはコンテスト開始から7分後です。
結果
コンテスト結果
ABの2完でした。
数学分からないと解けない問題で順位をかなり落としたので辛いです。
順位、パフォーマンス変動
順位は前回より3500近く下がり9701位、レーティングは385となりました。
反省点
灰色に落ちました
数学から離れているため明らかに数学問題に弱いのを改善していきたいです。。