ジャッジシステムアップデート!
c++17をようやく使い始めることになりそう(構造化束縛が今の所一番うれしいかな)
A - Walking Takahashi
FA狙おうとしたけど読解でぐだって終わり
最初にいる地点で場合分け
c++17だとclamp使う向け問題っぽい
提出コード
int main(){ cin.tie(0); ios::sync_with_stdio(false); int S, L, R; cin >> S >> L >> R; if(S < L) cout << L << endl; else if(R < S) cout << R << endl; else cout << S << endl; }
B - Picking Balls
pairでソートが想定かなあと思いつつもRとBに分けて別々にソートした
提出コード
int main(){ cin.tie(0); ios::sync_with_stdio(false); int N; cin >> N; vector<int> B, R; REP(i,N){ int X; char c; cin >> X >> c; if(c == 'B') B.push_back(X); else R.push_back(X); } sort(B.begin(), B.end()); sort(R.begin(), R.end()); for(auto x : R) cout << x << endl; for(auto x : B) cout << x << endl; }
C - Numbering Blocks
これ難しい
最初数学できるかなって10分くらい考えてたけど全然わからなかった(フック長の定理が使えるとかなんとか)
要素が最大でも9個までなのでnext_permutationで全探索して条件を満たすものを数えればいい
提出コード
int main(){ cin.tie(0); ios::sync_with_stdio(false); int a1, a2, a3; cin >> a1 >> a2 >> a3; ll ans = 0; vector<int> perm(a1+a2+a3); iota(perm.begin(), perm.end(), 1); do{ vector<vector<int>> X(3); REP(i,a1) X[0].push_back(perm[i]); REP(i,a2) X[1].push_back(perm[i+a1]); REP(i,a3) X[2].push_back(perm[i+a1+a2]); bool ok = true; REP(i,3){ for(int j=0;j+1<X[i].size();j++){ if(X[i][j] > X[i][j+1]) ok = false; } } REP(i,2){ for(int j=0;j<min(X[i].size(), X[i+1].size());j++){ if(X[i][j] > X[i+1][j]) ok = false; } } if(ok) ans++; }while(next_permutation(perm.begin(), perm.end())); cout << ans << endl; }
D - Calculating GCD
これ好き、平成ABC-Dっぽい感じ?
累積GCDを取った配列に対し、ごとににぶたんして上げる
になったときだけ1にならないので、最後の要素とのGCDを出力、それ以外はr+1を出力
提出コード
int main(){ cin.tie(0); ios::sync_with_stdio(false); int N, Q; cin >> N >> Q; vector<ll> A(N); REP(i,N){ cin >> A[i]; if(i > 0){ A[i] = gcd(A[i-1], A[i]); } } REP(i,Q){ ll S; cin >> S; int l = -1, r = N; while(r - l > 1){ int m = (l + r) >> 1; if(gcd(A[m], S) > 1) l = m; else r = m; } if(r == N) cout << gcd(S, A[N-1]) << endl; else cout << r + 1 << endl; } }
おわりに
unratedコンは気軽で楽しいね
緊張感あるratedも楽しいけど気兼ねなく楽しめるっていい