ARC108に参加しました
AtCoderのコンテストに参加した際の結果と考え方、反省点などを書いていきます。
コンテストページはこちら
解いた/挑んだ問題
A問題
問題の概要
整数が与えらます。
を満たすような正の整数の組はあるか
制約
- 入力はすべて整数
どのように考えたか
Pの約数を配列Aに格納し、となるような値が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分後です。
B問題
問題の概要
長さNの文字列sから、
foxという部分文字列を抜き出し、その前後を結合する
という動作をできる限り行った時、sの長さは最小でいくつになるか
制約
- sは英小文字のみからなる長さNの文字列
どのように考えたか
構造体を用意しfoxを組み上げていったり、場合分けしながら前から見ていった
結果
コンテスト中に通すことはできませんでした
A問題通すのがとても遅くなってしまったので通したかったです・・・
ACまでの時間
コンテスト中に通すことは出来ていません
結果
コンテスト結果
Aのみの1完でした。
A問題ですら通すのが遅くなりかなり冷えてしまいました。
パフォーマンス、レーティング変動
今回のパフォーマンスは361、前回より140も下がってしまいました。
レーティングはそれに伴い-25の608となりました。
反省点
冬は冷えるのでレートは冷えて当然
今回はコンテスト前バタバタしたりコンテスト中におなかが痛くなってトイレに3回駆け込んだりと不運な日だったと思いたいです。
自分の体調を管理することが高いパフォを出せることにつながりそうなので体調と相談しながら日々精進に励んでいきたいと思います。