ABC303 (2023/05/27)
〇A問題
おたふく.icon ややこしいのでl と o の時は、先に1 と 0に変換してから似ている文字列 (変換しているので一致) かどうかを判定。
TTT.icon SもTもreplace("1","l"),replace("0","o")して、S==TならYesとしました。
CarpDay.icon上のお二人のコメント見て「その手があったか!」と驚きました.ベタベタに解きました...
tako.iconCarpDay.iconさんと多分同じで愚直にやりました。
まーす.icon素直にifで場合分け
yuichang.icon愚直にやる
yan.iconどうしても一つだけWAになってしまい解けなかった
CarpDay.iconYesは合っていそう.NoなのにYesになっている入力例がないか,考えよう.
Yuto.icon やるだけ
sakana.iconTTT.iconと同じやり方です
〇B問題
おたふく.icon あらかじめ2人の組み合わせを全列挙しておき、隣り合うたびにそこからその組み合わせを削除。その後、残った組み合わせの数の総数が答え。
TTT.icon 全員の人数における2人の組み合わせの総数から、実際に隣り合った2人の組み合わせの集合の個数を引きました。import mathしてるのにPypyで提出してしまい痛恨のWA1回!
CarpDay.iconPyPyでmathモジュール使えなかったっけ??
おたふく.icon 確か以前の問題で行列を90°回転させるためにmathモジュールをimportして、pypyで提出するとWAになっていたと思います。
CarpDay.iconA問題にimport mathしたけどACだったよ.numpyのことでは?
おたふく.icon 自分が言っているのはnumpyでした。今CarpDay.iconのA問題に対するコードにmath.powを呼び出したコードとmath.combを呼び出したコードを2つ投稿すると、後者の方だけREになったので、pypyのmathモジュールにはmath.combが無い...?
CarpDay.iconおお,そうですか!勉強になります.PyPy3.7.0がサポートするのはPython3.6みたい.mathモジュール中のcombやpermは3.8以降から追加されたようです.
CarpDay.icon全組合せをTrue(不仲)にしておいて,隣り合ったペアをFalse(不仲でない)にして,最後に数える.
まーす.iconN(人数)個のset()型を格納するリストを作って、人iが隣り合った人を集合に足していく。最終的にforでN-1-len(list(N(人数)個のset()型を格納するリストのi番目)をカウント。表示は重複分があるので2で割った。1回目のWAはバグとりのprint()の消し忘れ、2回目のWAは表示部にて、小数点も表示されていた。後者に関して、前はいけたような気がするがそこんとこどうなんや......?
おたふく.icon 割り算の時は//で割らないと小数になっちゃうよ
まーす.icon理論上は確実に偶数になるので、/でも整数になるのではないかと思っていました。上記の計算上でどこかしら型が変わるのかしら......。ハッシュ化されてるから、今後は安牌とる必要ありそう。
おたふく.icon 割り算の演算をした時点で内部では理論上割り切れても割り切れなくてもint型では無くなるから、切り捨て除法の//が必要。
まーす.iconおたふく.icon今試しましたが、分母が1でも小数になりました。ありがとうございます。Cとの混同ということにしといて......(あれは前に(double)を入れないといけないハズなので......)。-
yuichang.iconset(dict?)で頑張る。i<jにするようにして入れた。iとj(i<j)の組み合わせがsetにない場合ans++。
tako.iconCarpDay.iconさんと多分同じです。
Yuto.icon 友達を数えていって,最後に余事象を考える.やるだけ問題のはずが,なぜかsample 3が通らない.二回連続でB問題解けなかった...
CarpDay.icon 12 3と1 23が区別できないのでは?
Yuto.icon (゚O゚;ハッ!
Yuto.icon (*゚ロ゚)ォォォオオ
yan.icon配列の中に配列を入れるやり方でやったためとても時間がかかった。
sakana.icon辞書使ってペアを格納した後にsetしてペアの組を数えて//2しました
〇C問題
おたふく.icon 現在の体力、位置情報を保持。回復薬の位置をsetで管理しておきつつ、現在位置が回復薬の場所であり、体力がK未満の時に現在の体力を更新後、使用した回復薬の位置をsetから削除。for文で回しておいて、体力が負になればNoを出力して、exit()。for文が周り切るとYesを出力。
CarpDay.icon多分おたふく.iconと同じ.薬の場所に2回目行っても薬残っていない,って書いてある??不満の1WA.
おたふく.icon アイテムを消費すると書いてあるので、無くなると思っていました。
CarpDay.icon消費するとは書いてあるけど,一口飲んで回復して,まだ十分残っているかもしれない...(しつこい (^^;)
TTT.icon 3つTLEで残りはACでした。回復薬のおいてある座標をリストに格納していたのを集合に格納し直そうとしましたが、時間内に上手くできませんでした。
yuichang.iconset(dict?)でその座標のアイテムを使ったか否かを管理。
tako.iconCarpDay.iconさんと同じで理由でWA。原因がわからず結構悩みました...辞書で薬のある場所を記憶しました。
まーす.iconBより簡単そうに感じたので、こっちから先にやった。まず、①H≧NなるときはYes。②H<Kのときこれが主題。下記②について、まずH-=1(移動分)。次に移動先にアイテムがあるか否か・・・イ。もしあれば、今の体力とKの比較・・・ロ。イかつロが真なれば、アイテムを消費し(無くなり)、HにKを代入。アイテムの消費を忘れ、1回WA。set型の差集合をしくじりRE。
Yuto.icon 言われたとおりにシミュレーションする.アイテムで+ 1回復すると誤読していて1WA.
sakana.icon3つTLEと1つWA.アイテムの探索ができてない
〇D問題
おたふく.icon 方針は合っていると思っていたが、無念のWA2。最近これが多い...。方針としては、CapsLockがオフ かつ X > Y の時にaを入力したいとして、CapsLockを押すとZ秒だけ時間を消費してしまうので、CapsLockをオンにしてから、aが何文字続けばZ秒の消費を上回って時間を短縮できるか計算。現在参照中の文字からその文字数分だけ連続してaが続いていればCapsLockを押すように実装。祝茶色コーダー。D問題がもやもやして素直に喜べない。追記 : 最小というキーワードが来たら、まずこの解法を念頭に置くようにしておきたい。
CarpDay.icon茶色おめでとう!
CarpDay.iconあの方法で解きました.yuichang.iconの方法が素直だと思う.常識的に無駄な方法も念のために候補に入れました.Xがむっちゃ大きくて,YとZが小さかったら,敢えてZを2回行う方法もあるような気がするんだけど... 自己解決しました.考えすぎでした.
tako.iconサンプルすら合わなかったです...悲しい
yuichang.iconDはDPのD。2パターンのボタンの状態を考える.
CarpDay.iconキャッチフレーズいいね!
Yuto.icon 見た瞬間DPと気付いた.丁寧に実装して,一発AC.気持良い.
〇E問題
CarpDay.icon入力例を手で書いて,「こんな方法で行けるかな?」と確信なしに投稿してAC.ラッキー.コンテスト終了後に確認したら,ユーザー解説と同じ方法でした.
yuichang.icon頂点の次数調べてdfsして切り離すのかなー等考えたが時間がなかった
おたふく.icon 頂点の次数を調べてDFSを行う 頂点の次数と辺を切り離さないとならない時の関係を考察した結果無事AC。解説を見ずに自力で解けたので嬉しい。
Yuto.icon 最初に1 - nの全頂点からDFSして,経路長が6になれば,その真ん中を切断する.次にUnionFindでグループごとの要素数を数えて出力.出来た!と思ったけどサンプルが通らない.デバッグしてたらコンテスト終わった.
〇F問題
CarpDay.iconHが大きいので多分最小値を二分探索するのかな?と予想しつつ,判定する良い方法が分からず時間切れ.後日解説見るが理解できず.全体の解説ツイートで考え方を理解する.ゴールから考える!なるほど.うまく実装できず,コード量が少ないAC解答見て勉強.同じようなプログラムなのに,自分のはTLE.原因はPyPyでmain関数使っていたこと!Pythonだとmain関数使った方が速いのに!参考ページ Yuto.icon これ以降見てない