ABC174に参加しました
AtCoderのコンテストに参加した際の結果と考え方、反省点などを書いていきます。
コンテストページはこちら
解いた/挑んだ問題
A問題
問題の概要
室温が30°以上の時冷房を入れると決めており、現在の室温はXである
冷房を入れるかどうか判定せよ
制約
- Xは整数である。
どのように考えたか
受け取った室温が30を超えているかif文で判定し出力
結果
一発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() #define rall(v) v.rbegin(), v.rend() using namespace std; using ll = long long; using pi = pair<int, int>; const ll INF = 1LL << 60; int main() { int c; cin >> c; if (c >= 30) { cout << "Yes" << endl; } else { cout << "No" << endl; } return 0; }
if文を使うだけの簡単な問題だった
ACまでの時間
ACしたのはコンテスト開始から1分後です。
B問題
問題の概要
二次元平面状にN個の点があり、それぞれについて座標が与えられる
原点からの距離がD以下のものの個数を答えよ
制約
- 入力はすべて整数
どのように考えたか
問題文にも明記されているが、ピタゴラスの定理を用いてDと比較した
結果
一発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() #define rall(v) v.rbegin(), v.rend() using namespace std; using ll = long long; using pi = pair<int, int>; const ll INF = 1LL << 60; int main() { int n,cnt=0; double d; cin >> n >> d; ll a, b; rep(i, n) { cin >> a >> b; ll tmp = a * a + b * b; if (sqrt(tmp) <= d)cnt++; } cout << cnt << endl; return 0; }
暗黙的キャストやオーバーフローが心配だった
ACまでの時間
ACしたのはコンテスト開始から6分後です。
C問題
問題の概要
整数Kが与えられる
7,777,777,...と続く数列の中に初めてKの倍数が登場するのは何項目か答えよ
存在しない場合は'-1'を出力せよ
制約
- Kは整数である
どのように考えたか
コンテスト中に何の方針も立たず、ACできませんでした
結果
未提出
・提出したコード
未提出のためありません
ACまでの時間
未提出のためありません。
D問題
問題の概要
赤と白の石が併せてN個ある祭壇がある
以下の二つの操作で、赤い石を左に、白い石を右に並べる最低回数を求めよ(赤い石の左に白い石が来ないようにする)
- 石を二つ選び交換する
- 石の色を白⇔赤 とする
制約
- 'R'または、'W'
どのように考えたか
赤い石の個数=kとして、左からk個分の石の色を見る
そのうち白い石の個数が交換する個数になるため、白い石の個数を出力
結果
一発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() #define rall(v) v.rbegin(), v.rend() using namespace std; using ll = long long; using pi = pair<int, int>; const ll INF = 1LL << 60; int main() { int n,cnt=0; map<char, int>mp; cin >> n; string s; cin >> s; for (auto c : s) { mp[c]++; } if (mp['W'] == n || mp['R'] == n)cout << 0 << endl; else { rep(i, mp['R']) { if (s[i] == 'W')cnt++; } cout << cnt << endl; } return 0; }
過去に解いたことがあったが、気づくまでに時間がかかった
ACまでの時間
ACしたのはコンテスト開始から42分後です。
結果
コンテスト結果
ABDの3完でした。
Cがとても難しかったです。。。
パフォーマンス、レーティング変動
今回のパフォーマンスは772、前回より150近く上がりました。
レーティングはそれに伴い+24の578となりました。
反省点
今回のD問題は、過去に解いた問題と解法が全く同じでしたが、それに気づくのに時間がかかり
提出が遅れてしまいました
C問題は解けないと察してしまいましたが、いずれこのような問題にもチャレンジしていきたいです!