ABC 329(2023/11/18)
https://atcoder.jp/contests/abc329/tasks
〇A問題
Yuto.icon print(*S)
TK.icon *S。 デフォルトで空白なことをド忘れして明示的にsep = " "をいれた
おたふく.icon 上2名に同じく
tako.icon一番でうれしいな
TTT.icon Yuto.iconさんと同じです.
CarpDay.icon TK.iconさんと同じくド忘れ派 (^^;
Yuichang.icon 訳ありスマホ参加。for回す
Kaplam.iconend = " " 追記:緑入れました、最近過労気味なのとキリがいいので参加不定期になる予定ですが予定は未定です
kakip.iconprint(*input())
まーす.iconTK.icon さんと同じ.
〇B問題
Yuto.icon sorted(set())[-2]
おたふく.icon Aをsetにキャストして、listに再度キャストしてsortしてA[-2]
TK.iconあらかじめ最大値を持っておく。内包表記でその最大値を除いたリストを生成してmaxをとった
tako.icon最大値をとってからリスト回して最大値の時はcontinue
TTT.icon max_first = max(A)とし,max_secondを別に設けて,for a in A: if a < max_first and max_second <= a: max_second = aとしました.
CarpDay.icon Yuto.iconさんおたふく.iconさん派
Yuichang.icon 最大値は無視する
Kaplam.icon多分Yuichang.iconさんと同じ
kakip.iconsorted(list(set(a)))[-2]
まーす.iconTTT.iconさんと同じ.
〇C問題
Yuto.icon Sを部分文字列に分割して,数える.部分文字列作る時,文字列結合してたのにPyPyで提出してしまって(提出した直後に気付いた),1600[ms]くらいかかった.あぶない...
おたふく.icon 各文字で連続して最大何文字続くかdictで管理
TK.icon前から順に見て、同じ文字列が続く限りsetに集めていった。文字列の結合の回数が多いためかTLEが出たため、setに格納する情報を変更した。
tako.iconset使ったらTLEなって萎え
CarpDay.icon TK.iconさん派でTLE(MLE付き).(文字,文字数)のタプルをsetに格納するように変更.
TTT.icon 各文字ごとの最大連続数の合計値が答えだということは気づけましたが,Sの長さ的にTLEしそうな方針しか思いつかなかったのでDに専念しました.
Kaplam.iconlist作って前の文字持ってord(文字) - ord("a")の所に足して最後にsum(list)って感じ
kakip.iconsetでTLE,MLEになったのでord()で数える方針に変更
yuichang.icon set入れまくったらTLEなったから差分更新する感じ
まーす.icon文字→数字となる写像を考え,対応付けをして,文字ごとに今rの時点で最大何個連続しているかを格納するリストをつくる.今見ている文字の始まりの部分lとrの差分を考え,max(r-l,見ている文字のlの時点で何個連続しているか)により,リストの更新.要するに尺取り法?のようなことをした.
〇D問題
Yuto.icon 一点更新,区間取得なので,セグ木使おうとしてたけど,落ち着いて考えたら要らない.sortedcontainers.SortedList.{add(), discard()}を使ってみた.
おたふく.icon defaultdict(sortedcontainers.SortedSet)
TK.iconheapqに投票数と人の情報をタプルにして、入れては出してを繰り返して突破。
tako.icon最大になったら更新していく感じで
CarpDay.icon tako.iconさん派かな?
TTT.icon i-1番目時点での最高得票者番号とその票数をi番目時点と比べて,票数が多ければ両方更新し,票数が等しければ得票者番号が少ない場合に限り最高得票者番号も更新しました.時間内にD解けたのは初めてで,終了7分前だったのでとても嬉しかったです.
Kaplam.icon多分TTT.iconさんと近い、LINEに速さ勝負って書いてたから頑張ったのに上にやばいのいるんだけど
kakip.iconSortedListでやろうとしたけど使い方わからないし途中で別に要らないことに気づいて、TTT.iconさんと同じやり方に変えた
yuichang.icon結局最大値持っておけばいい
〇E問題
Yuto.icon まず, Sの中でTと一致している部分を#で置き換える(S=ABCBABC, T=ABCなら,S=###B###).その後,#以外を消せるか判定しようとしたけど無理だった
TK.iconSの中でTと一致している部分以外の部分の重なり方がどうなっているかを確認していけばいけそうな気がしたが、いちいち確認すると計算量的に無理だと思い、良い方針が立たずFへ行った。
tako.iconRE消して満足、WAは消えませんでした
CarpDay.icon SをTでsplitして,残った文字列を作成可能か判定しようとしたが,力及ばず.コンテスト後にごり押し実装するが,17/50WA.原因考えるパワーもなく解説を読んで実装.(策に溺れた1/50WAを経由して)無事AC.別解のDPも面白い.
Kaplam.iconその文字列見つけたらそこから左と右見て広げていく感じ、サンプルで想定通りの動きしてるのに1/3ぐらいWA出た 追記:広げていく処理書いたつもりが忘れてた、適当に書き換えてTLE3までなったからちゃんと書けばAC出そう
kakip.iconSのなかでTを探して、そこから左右にTを埋めていくかんじ(逆順で処理)  
CarpDay.icon提出コード拝見しました.コンテスト中に実装できてすごい!最後のforループ,6回のうち最初の3回だけでACになりました.
まーす.iconD問題が苦手そうな問題だったのでとばしてEへ.方針は前から見て行って,XにTの部分文字列を追加していく感じ.四つの場合分けが必要だと思っていて,そのプログラムを提出するもむなしくWA.WAケースが本当に分からない.まだ解説みないぞー.
おたふく.icon コンテスト後に無事AC。方針自体は解説と一緒だったが、純粋実装問題は何かと苦手意識...。
〇F問題
Yuto.icon 箱型UnionFindだと思うけど,Scrapboxのライブラリを使いこなせなかった.自分でライブラリ整備しとけば良かったな...各クエリでbuf.union(b,a)して,buf.size(b)したかったんだけど,sizeが実装されてなくて,人が書いたライブラリを拡張しようと頑張ったけど無理だった.
Yuto.icon 競プロ界隈でよく聞く, マージテク ってこれのことだったんですね.
おたふく.icon 同じく箱型UnionFindで思考ロック。一度愚直解を提出するもTLE6件のみで少し惜しい...。お風呂に入ってからもしやと思った解法で提出するとAC...。まさかこれだけとは...。
TK.icon前回の重み付きUnionFindの件があったため、箱型とかあったなと思い、調整を試みたが、間に合わないと悟り、別方針を考えるも結局間に合わず。
CarpDay.icon おたふく.icon派.ライブラリ少し変更して何とかならないか試みるが,あれは球が主体で,箱が主体じゃないんだよね...コンテスト後,愚直解から初めて少しずつコード変更する.多い方に集めるコードを色々試し,最終的にkakip8さんと同じ方針でAC.うーん.
kakip.icon要素数が多いほうの色の集合に要素数が小さいほうの集合でupdateする。  
Kaplam.icon素直にdefaultdict(set)で出してみたもののTLE6、解説読んでそれだけでいいのかとやってみたら逆にTLE増えた、多分やり方が悪い
yuichang.icon違うみたい?だけど箱型UnionFindとか何処で知識得ているんですか?有名??Eまでで全く見たことがない...
Yuto.icon 一般的ではなさそうですが,勉強会メンバーの中では これ のことを言っているのだと思います.(私もよく分かっていない)
#AtCoder #ABC