ABC164に参加しました
AtCoderのコンテストに参加した際の結果と考え方、反省点などを書いていきます。
コンテストページはこちら
解いた/挑んだ問題
A問題
問題の概要
羊がS匹、狼がW匹います。
羊が狼より多い場合"safe"を、それ以外は"unsafe"を出力せよ。
どのように考えたか
S>Wなら"safe"、elseなら"unsafe"
結果
一発ACでした。(Cで提出してしまった)
・提出したコード
#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++) #define all(v) v.begin(), v.end() using ll = long long; using namespace std; int main(){ int S, W; cin >> S >> W; if (S <= W) { cout << "unsafe" << endl; } else { cout << "safe" << endl; } }
問題文で引っ掛かった人が少しいそうだと思い、以上と未満に気を付けながらコーディングをしました。
ACまでの時間
ACしたのはコンテスト開始から3分後です。
B問題
問題の概要
高橋君のモンスターは体力A攻撃力B,青木君のモンスターは体力C攻撃力Dです。
高橋君から互いに攻撃しあいます。
A,B,C,D全て
高橋君が勝った場合"Yes"を、負けた場合"No"を出力せよ
どのように考えたか
while文の中で互いに攻撃しあう
どちらかの体力が1以上じゃなくなった場合breakする
高橋君の体力が残っていた場合"Yes",そうでない場合"No"を出力
結果
一発ACしました。(またCで提出してしまいましたが)
提出したコード
#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++) #define all(v) v.begin(), v.end() using ll = long long; using namespace std; int main(){ int a, b, c, d; int cnt = 0; cin >> a >> b >> c >> d; while(a >= 1 && c >= 1){ if(cnt % 2 == 1)a -= d; if(cnt % 2 == 0)c -= b; cnt++; } if (a >= 1) { cout << "Yes" << endl; } else { cout << "No" << endl; } }
<解いてみての感想を書く>
ACまでの時間
ACしたのはコンテスト開始から10分後です。
C問題
問題の概要
クジを × 回引いて、i回目に文字列で表せる商品が出ました。
景品は何種類ありますか?
どのように考えたか
setにを入れてset.size()をすれば何種類か出る
結果
一発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++) #define all(v) v.begin(), v.end() using ll = long long; using namespace std; int main(){ int N; string S; set<string>gacha; cin >> N; rep(i, N) { cin >> S; gacha.insert(S); } cout << gacha.size() << endl; }
<解いてみての感想を書く>
ACまでの時間
ACしたのはコンテスト開始から12分後です。
結果
コンテスト結果
ABCの3完でした。
Dは見た瞬間に諦め、Eはダイクストラ法っぽかったので書いては見ましたがダメでした。
順位、パフォーマンス変動
順位は前回より3000近く上がり4676位、レーティングも50近く上がりました。
反省点
今回はCとDの壁が大きく、実質ABC早解きコンテストと感じました。
茶色が見えてきましたが、焦らず堅実にやっていきたいです。