imomoの勉強記録

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

ABL Begginer Contestに参加しました

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

解いた/挑んだ問題

A問題

問題の概要

整数Kが与えられる
文字列"ACL"をK回繋げた文字列を出力せよ

制約
  • 1 \leq K \leq 5
  • 入力はすべて整数
どのように考えたか

文字列"ACL"をfor文でK回出力し、for文を抜けたら改行

結果

一発AC

・提出したコード

#include <bits/stdc++.h>
#include <atcoder/all>

#define rep(i, n) for (long long i = 0; i < (long long)(n); i++)
#define REP(i, n) for (long long i = 1; i <= (long long)(n); i++)
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
using namespace std;
using namespace atcoder;
using ll = long long;
using pi = pair<int, int>;
const ll INF = 1LL << 60;

int main() {
	int k;
	cin >> k;
	string a = "ACL";
	rep(i, k)cout << a;
	cout << endl;
	return 0;
}

普段どうりのA問題で安心した

ACまでの時間

ACしたのはコンテスト開始から1分後です。

f:id:iiiimmmmo:20200926225041p:plain
ABL_A

B問題

問題の概要

A以上B以下の数列SとC以上D以下の数列S´がある
SとS´に共通する整数は存在するかどうか

制約
  • 0 \leq A \leq B \leq 10^{18}
  • 0 \leq C \leq D \leq 10^{18}
  • 入力はすべて整数
どのように考えたか

CがA以上B以下 または、AがC以上D以下の場合存在する

結果

一発AC
提出したコード

#include <bits/stdc++.h>
#include <atcoder/all>

#define rep(i, n) for (long long i = 0; i < (long long)(n); i++)
#define REP(i, n) for (long long i = 1; i <= (long long)(n); i++)
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
using namespace std;
using namespace atcoder;
using ll = long long;
using pi = pair<int, int>;
const ll INF = 1LL << 60;

int main() {
	ll a, b, c, d;
	cin >> a >> b >> c >> d;
	bool ans = false;
	if (a <= c && c <= b || c <= a && a <= d)ans = true;
	if (ans) {
		cout << "Yes" << endl;
	}
	else {
		cout << "No" << endl;
	}
}

ノートに書いてやったらスムーズに解けた

ACまでの時間

ACしたのはコンテスト開始から4分半後です。

f:id:iiiimmmmo:20200926225101p:plain
ABL_B

C問題

問題の概要

N個の都市とM個の双方向道路があり道路iは都市AとBを結んでいる
道路で直接結ばれていない都市間に道路を作る操作が与えられる。
全ての都市から全ての都市に道路を辿ることが可能になるまで最低限必要な操作回数は何回か

制約
  • 2 \leq N \leq 10^5
  • 1 \leq M \leq 10^5
  • 1 \leq A_i < B \leq N
  • どの二つの道路も同じ都市のペアを結ばない
  • 入力はすべて整数
どのように考えたか

ACLのDSUを使って連結させ、連結成分の個数を求め-1を出力する

結果

一発AC
提出したコード

#include <bits/stdc++.h>
#include <atcoder/all>

#define rep(i, n) for (long long i = 0; i < (long long)(n); i++)
#define REP(i, n) for (long long i = 1; i <= (long long)(n); i++)
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
using namespace std;
using namespace atcoder;
using ll = long long;
using pi = pair<int, int>;
const ll INF = 1LL << 60;

int main() {
	int n, m, a, b;
	cin >> n >> m;
	dsu d(n);
	rep(i, m) {
		cin >> a >> b;
		a--, b--;
		d.merge(a, b);
	}
	auto g = d.groups();
	cout << g.size() - 1 << endl;
}

直前に勉強していたことが出たので解けた

ACまでの時間

ACしたのはコンテスト開始から11分後。

f:id:iiiimmmmo:20200926225115p:plain
ABL_C

結果

コンテスト結果

ABCの3完でした。
ACLを使用するコンテストと聞いていたので、身構えていたがABは案外簡単でよかった

f:id:iiiimmmmo:20200926225133p:plain
ABL

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

今回のパフォーマンスは1071、前回より900も上がりました。
レーティングはそれに伴い+68の606となりました。

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

反省点

ACLはもともと難しいコンテストに向けてのものだと思っていたので、勉強してなくて当日に焦って勉強しました。
その結果C問題にACLの問題を解くことができましたが、事前に勉強しておけばもっといいパフォーマンスが出たのかなと思いました。