cmat日記(競技プログラミングその他)

AtCoderはじめました (id: cmat)

AGC-A 19-30

これでAGC-A終了。

 

f:id:cmat-comp:20190228002420p:plain

緑化進行中。

来週再来週末と連続してAGCがあるらしい。日程的にどちらもちょっと参加できないかも。

 

今週はどうなるんだろうか。また直前にABCがアナウンスされるのだろうか。

 

 

旅行中なので、移動時間にipadで考察だけメモ→落ち着いてから実装という流れを取ったが、問題文を勘違いしていたケースがちらほら。あと、まだint溢れとかよくやらかす。

 

 

019

2l引けるまで、最小金額で作って引き、、、という貪欲法

 

020

最初に後退する必要が生じた方が追い詰められて負ける
A-Bの偶奇

 

021

最初に9でない値になる桁と出会った時に、上位を一つ減らして残り全て9
最上位が9の場合、下位が全て9ならNそのもの、それ以外なら最上位減らして残り9

stringでchar to intミスってWA出した

 

022
sが26文字でない限り、使われていない文字のうちで辞書順最小を付け足せばいい。
26文字なら、next_permutationすればいい。
falseが返ってきたら-1を出力

入力例4のパターンがある。どうするか。
next_permuationしたものが元とずれるまで出力すればいい。

 

023
累積和を計算した時、和が0の部分列が存在すると、累積和の配列に同じ値が現れる。
それらを拾ってくれば答えは出るが、O(N^2)

mapを使って累積和の値を記録しておき、各値について登場回数をnとしてnC2を出して和を取ればいい。

200点にしては難しい。

累積和のint溢れでWA出した。

 

024
差は、A-B,B-A,A-Bを繰り返す.
あるkでの値は二つ前*2+一つ前で求まるので、これでok

 

025
A, Bの値について全探索

 

026
左から逐次的に。
使用する色の種類は関係ないので、左隣と同じなら変えるでok
変更先は確実に重複のない値ならなんでも

027
ソートして小さい方から。
ちょうど配らないといけないあたりで微調整

 

028
最小公倍数っぽい
N、Mが互いに素なら自明
互いに素でないなら、最小公倍数で条件を満たせるか否か

具体的にstringを作ろうとすると長すぎてMLEspするのでmapで。

->WA, またint溢れミス。

 

029
要するに、隣接するW,BをswapしてWを左に寄せていく操作。
最終状態は必ず、WWW...BBBなので、Wを寄せるのにかかるステップ数。
左からi番目のWを配列の左からi番目の位置に移すのにかかるステップ数の和。

 


030
CBCB..と食べて、Bが無くなったらACAC..でAがなくなったら終了
min(C, B)=CならB+C
min(C, B)=Bなら2B+min(A,C-B)

一枚だけなら食べても大丈夫なので微修正。