imomoの勉強記録

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

ARC108に参加しました

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

解いた/挑んだ問題

A問題

問題の概要

整数S,Pが与えらます。
N + M = S, N × M = Pを満たすような正の整数の組(N,M)はあるか

制約
  • 入力はすべて整数
  • 1 \leq S,P \leq 10^{12}
どのように考えたか

Pの約数を配列Aに格納し、S - A_iとなるような値がAに存在するかどうかを二部探索で判定する

結果

二回目で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 FOR(i,x,n,r) for(long long i = x; i< (long long)(n); i+=r)
#define afor(a,t) for(auto a:t)
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
using namespace std;
using namespace atcoder;
using ll = long long;
using pi = pair<int, int>;
ll pows(ll x, ll n) {ll ret = 1;while (n > 0) {if (n & 1) ret *= x;x *= x;n >>= 1;}return ret;}

//約数列挙
vector<ll> enum_divisors(ll N) {
	vector<ll> res;
	for (ll i = 1; i * i <= N; ++i) {
		if (N % i == 0) {
			res.push_back(i);
			// 重複しないならば i の相方である N/i も push
			if (N / i != i) res.push_back(N / i);
		}
	}
	// 小さい順に並び替える
	sort(all(res));
	return res;
}

int main() {
	ll s,p,key;
	bool ans = false;
	cin >> s >> p;
	auto st = enum_divisors(p);
	for(int i = 0;i < st.size();i++){
		key = s - st[i];
		if(key < 0)break;
		if(binary_search(all(st),key)){
			ans = true;
			break;
		}
	}
	//Yes/Noを返す
	if (ans) cout << "Yes" << endl;
	else cout << "No" << endl;
	return 0;
}

一回目はなぜか列挙した約数の全要素を見ずに提出したので今後気を付けていきたいです

ACまでの時間

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

f:id:iiiimmmmo:20201121230822p:plain
ARC108_A

B問題

問題の概要

長さNの文字列sから、
foxという部分文字列を抜き出し、その前後を結合する
という動作をできる限り行った時、sの長さは最小でいくつになるか

制約
  • 1 \leq N \leq 2 × 10^5
  • sは英小文字のみからなる長さNの文字列
どのように考えたか

構造体を用意しfoxを組み上げていったり、場合分けしながら前から見ていった

結果

コンテスト中に通すことはできませんでした
A問題通すのがとても遅くなってしまったので通したかったです・・・

ACまでの時間

コンテスト中に通すことは出来ていません

f:id:iiiimmmmo:20201121231315p:plain
ARC108_B

結果

コンテスト結果

Aのみの1完でした。
A問題ですら通すのが遅くなりかなり冷えてしまいました。

f:id:iiiimmmmo:20201121231412p:plain
ARC108

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

今回のパフォーマンスは361、前回より140も下がってしまいました。
レーティングはそれに伴い-25の608となりました。

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

反省点

冬は冷えるのでレートは冷えて当然
今回はコンテスト前バタバタしたりコンテスト中におなかが痛くなってトイレに3回駆け込んだりと不運な日だったと思いたいです。
自分の体調を管理することが高いパフォを出せることにつながりそうなので体調と相談しながら日々精進に励んでいきたいと思います。