Codeforces Round #739 (Div. 3) Japanese editorial

.
0
m_99 @m_99kyopro

10個中k個は, 一番大きい時でk=5,comb(10,5)≒250なので間に合う

2021-08-19 01:51:21
m_99 @m_99kyopro

大丈夫ならsに含まれる各文字の個数が分かるのでtのPrefix何文字がsの候補か分かる あとは確かめる F.10個中k個の組み合わせを全部試す n以上という条件はi=0,1,...,(nの桁数)に対し上からi桁が同じでi+1桁目がnのその桁の数字より大きい, という風に出来るか試し出来るなら最小値更新, とする

2021-08-19 01:51:17
m_99 @m_99kyopro

E.validと仮定した時, 消される文字の順番は後ろから見て現れた順の逆順 tには, 最後に消される文字は最初のsに含まれる個数×操作の回数, 最後から2番目に消される文字は個数×(操作の回数-1), ……だけ含まれるはずなのでその倍数で無ければ-1,

2021-08-19 01:51:02
m_99 @m_99kyopro

C.i列目からは2i-1個の整数が書かれる 1+2+...+nがO(n²)なので2i-1がkに対し小さい間は愚直に, 最後だけ頑張ることでO(√k)に D.2^0~2^62くらいまで全部試す 操作の回数は2^kのPrefixが何文字分まで部分列として含まれるかを貪欲にチェックして計算

2021-08-19 01:50:50
m_99 @m_99kyopro

CF Round #739(Div.3) A.全部調べる B.人数を2nとしてまずnを求める これはmax(a,b)-min(a,b)に等しい a,b,cが2nより大きくなってしまったら-1 cに対称な位置はcがn以下ならnを足し, そうでなければ引く

2021-08-19 01:50:42
laycrs @laycrs

F, 使う文字種の集合(最大2^10通り)は全探索する. 後は先頭x桁は元々と一致させて,x+1桁目を元々より大きくする,x+2桁目以降は最小で埋める,というのを全部試す. 9999が絶対可能なので同じ桁数内で探せば良い. pic.twitter.com/k4SedsJ64i

2021-08-19 01:50:14
拡大
laycrs @laycrs

後は本当に矛盾がないかどうか,Tを再構成してみて一致するか試す. pic.twitter.com/gmNKNt15Cq

2021-08-19 01:50:13
拡大
laycrs @laycrs

E, 最後からみて初めて出現する順番に文字を拾っていくと,消す文字の逆順の配列が作れる. k番目に消した文字は,「文字列Tに出てくるその文字の回数 / k」だけ最初Sにあったはず. ということで,Sの文字数がわかり,Tの先頭から拾ってくることでSが復元できる.

2021-08-19 01:50:12
laycrs @laycrs

D, 最終的に調整する2^kは18桁以下ぐらいで考えれば良い. 2^kを列挙して,左からx桁を作れたら,残りの桁数のコストで完成できる,という情報を前処理で求めておく. 後は,どの桁を残すかを全探索すれば良い. pic.twitter.com/aGI78JWXd8

2021-08-19 01:50:12
拡大
laycrs @laycrs

Codeforces Round 739 (Div. 3). A,条件を満たすものを列挙しておく. B,n = 2*abs(a-b)人いる.全員がn番を超えてなければ(c+n/2) mod nぐらいを出力. C,sqrt(K-1)でどの列からスタートする逆L次型に属するかわかる.後はいくら下にいっていくら左にいくかで補正. pic.twitter.com/ruIHcTWlgA

2021-08-19 01:50:11
拡大
拡大
拡大