imomoの勉強記録

主に勉強の記録などを残していきます

ABC174に参加しました

AtCoderのコンテストに参加した際の結果と考え方、反省点などを書いていきます。
コンテストページはこちら

解いた/挑んだ問題

A問題

問題の概要

室温が30°以上の時冷房を入れると決めており、現在の室温はXである
冷房を入れるかどうか判定せよ

制約
  • -40 \leq X \leq 40
  • 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分後です。

f:id:iiiimmmmo:20200802225851p:plain
ABC174_A

B問題

問題の概要

二次元平面状にN個の点があり、それぞれについて座標が与えられる
原点からの距離がD以下のものの個数を答えよ

制約
  • 1 \leq N \leq 2×10^5
  • 0 \leq D \leq 2×10^5
  • |X_i|,|Y_i| \leq 2×10^5
  • 入力はすべて整数
どのように考えたか

問題文にも明記されているが、ピタゴラスの定理を用いて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分後です。

f:id:iiiimmmmo:20200802225925p:plain
ABC174_B

C問題

問題の概要

整数Kが与えられる
7,777,777,...と続く数列の中に初めてKの倍数が登場するのは何項目か答えよ
存在しない場合は'-1'を出力せよ

制約
  • 1 \leq K \leq 10^6
  • Kは整数である
どのように考えたか

コンテスト中に何の方針も立たず、ACできませんでした

結果

未提出
提出したコード
未提出のためありません

ACまでの時間

未提出のためありません。

D問題

問題の概要

赤と白の石が併せてN個ある祭壇がある
以下の二つの操作で、赤い石を左に、白い石を右に並べる最低回数を求めよ(赤い石の左に白い石が来ないようにする)

  • 石を二つ選び交換する
  • 石の色を白⇔赤 とする
制約
  • 2 \leq N \leq 200000
  • c_iは'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分後です。

f:id:iiiimmmmo:20200802225949p:plain
ABC174_D

結果

コンテスト結果

ABDの3完でした。
Cがとても難しかったです。。。

f:id:iiiimmmmo:20200802230037p:plain
ABC174

パフォーマンス、レーティング変動

今回のパフォーマンスは772、前回より150近く上がりました。
レーティングはそれに伴い+24の578となりました。

f:id:iiiimmmmo:20200802230416p:plain
コンテスト成績表
f:id:iiiimmmmo:20200802230656p:plain
ABC174を終えた時点でのレーティング

反省点

今回のD問題は、過去に解いた問題と解法が全く同じでしたが、それに気づくのに時間がかかり
提出が遅れてしまいました
C問題は解けないと察してしまいましたが、いずれこのような問題にもチャレンジしていきたいです!