ABC361 (2024/07/06)
https://atcoder.jp/contests/abc361/tasks
〇A問題
CarpDay.icon kakip.iconさんに教えてもらった拡張機能を使うと,提出前にサンプルInputをチェックできて大変便利なんだけど,A問題のときはアクセス集中して,チェックするのに時間がかかる.そのため,今回はB問題から始めることに.で,B問題終わったあとに取り組む.A[:K] + [X] + A[K:].そうか,insertなんてあるんだ..
kakip.iconA.insert(K, X)
まーす.iconfor文をぶんまわす.
まーす.icon過去のデータから見るに今回は茶に降格しないな......(セーフ......)
Kaplam.icon↑↑と同じ
tako.icon kakip.iconさんと同じ
TTT.icon print(*A[:K], X, *A[K:])にしました.今回AしかACできなかった...泣
〇B問題
まーす.icon考え方は補集合.それに気が付かなくて,なんかいもペナルティくらった.
まーす.iconもう少し説明すると,Noのケースを優先して探した
kakip.iconできない
CarpDay.icon kakip.iconさんとtako.iconさんのコード確認しました.大きい直方体が小さい直方体を内部に含む場合を考え漏れてしまったのでは?←間違い.二人のコードはこの場合も対応しているはず.じゃあ,なぜWA?
CarpDay.icontako.iconさんから教えてもらいました.小さい方の直方体の全頂点が大きい方の直方体の面上にある場合(ex. (0,0,0,2,2,2), (0,0,0,1,1,2))とか,1つの面が相手の直方体のある面に重なり,その対面は相手の直方体を貫いた先にある場合(ex. (0,0,0,2,2,2), (0,0,0,1,1,3)),本当はYesなのにNoになってしまいます.うーん.盲点だ.
Kaplam.iconx,y,zそれぞれ包んでるか見る
tako.icon できない
CarpDay.icon できた.x, y, zそれぞれの範囲調べて,1つでも重複がなければNo.
TTT.icon WA2つを取り除くことができませんでした.
CarpDay.icon(私も見落としましたが)$ a<d,\ b<e,\ c<fなので,nearとかfarの処理は不要です.あと最後の判定,3次元座標のまま比較したら,左から順に評価するから,x座標が異なれば,x座標の大小だけの比較になりますよ.
〇C問題
kakip.iconソートしてd+i個目-i個目のmin
Kaplam.iconしゃくとり
まーす.iconkakip.iconさんと同じ,loop回数をミスって何回もペナルティくらった(n回目)
CarpDay.icon 「ループ」ミススペル??
まーす.icon1回目はfor i in range(K),2回目はfor i in range(N - K)という風にfor文を回したので,WA出ました.指摘サンクスです.
Kaplam.icon「loop」は繰り返しの動作を意味している。 一方「roop」は、「ループ(家禽の目と鼻の炎症の総称)」を意味する「roup」の別表記である https://www.weblio.jp/content/loop#google_vignette
CarpDay.icon「家禽」!?通だなぁ...あ!いつの間にか,修正されている(^^
まーす.iconなんか勘違いして覚えてました......Haskellでみた覚えがあったけど,今確認したらloopだった......
CarpDay.iconICPC Regionalの問題はすべて英語です...参加準備のための説明もです...
まーす.iconあ.......まずい......
CarpDay.iconお互い,良い機会だと思って楽しんで勉強しましょう.
まーす.icon英単語帳を片手にがんばります.
tako.icon deque使ってやろうとしたけどできなかったからしゃく取り
CarpDay.iconまずソート.最小値と最小値+1の幅,最大値-1と最大値の幅をチェックして,長い方を範囲から外す「両端からじわじわ削る尺取り」で提出してWA(32/60).NGケース見つけて(1, 3, 5, 6, 7, 9, 11, 12 から5個削る.同点のとき前から削ると9,11,12が残る.正しい答えは5,6,7)考え直して,kakip.iconさんと同じ方法思いつくもまたWA(5/60).原因分からず諦めてD問題へ.ラスト10分で戻ってコード見たら,rangeの引数が1つ足りないしょうもないミスに気付いて何とかAC.
TTT.icon CarpDay.iconさんの前者の方針で書いてWAで,同じくNGケースを見つけたのですがアルゴリズムが分かりませんでした.
CarpDay.icon(ソート済みを前提として)K個削ったあとの最小値を仮に固定すると,その最小値以上の値をN-K-1個を選ぶとき,なるべく最大値を小さくしたいなら,最小値に近い小さい数を選んだ方がよい.つまり,最小値からN-K個を選ぶべき.
〇D問題
Kaplam.icon全通り試しても問題なさそうとBFSしたらC++でも少しだけTLEが出たので乱択で通そうとしたのに全然通らず、てかWA2から変わってないからこれランダム出来てない、普通にrand()するだけじゃダメなのかな、色々調べたんだが、手元で何回実行しても変わらんし_(:3」∠)_
kakip.icon石の組み合わせと石がないところの位置を持って幅優先
まーす.icontopology専門のM先生の授業で似たようなことはやった気がするけど,石が交互に並んでいるパターンだけなんでよな......
CarpDay.iconBFSかな?と思うものの,-1(不可能)のケースが厄介.見つかる場合の深さの上界を見積れず,とりあえずE問題を見たら時間内に戻れず..
CarpDay.iconコンテスト後,苦労してやっとAC.直前までのWA(5/32)とほとんど処理が変わらないはずなのに,何で直前のはWAなんだろう??誰か教えて~~!!
CarpDay.icon解決しました.最初からS=Tのときに対応していませんでした!確認したら,S=Tのケース5/32も入ってた!全然コーナーケースちゃうやん!
〇E問題
kakip.iconコストの合計が最大になる経路を求めて、すべてのコストの2倍からその最大コストを引く
CarpDay.icon 木の直径を求めて,全コスト×2から直径を引く.このサイトに以前記した木のページを参照したが,コード例が「TBA」のままでした(ごめんなさい).
〇F問題
まーす.iconBとばしてこれみてた.重複して数える部分があるから,その部分をどのように処理するかという点が難しい......
まーす.iconN >= 2 ^ bを満たすbの最大値に着目した感じで,ある程度の方法論は見つけたけど,オーダーコストがびみょい......(∵線形探索になる)
CarpDay.icon$ N=10^{18}あるから,bが小さいときは線形探索はNGじゃね?
まーす.iconそうです.平方数のせいで重複パターンがうまれるので,うまいこと(少ないループ回数で)カウント済みの平方数の場合を除きたいのです.この処理が難しい.......私視点では,N ^ 2以下の平方数のlistの作成が最大の山です.
まーす.icon解説をざっと見て来たけど上から2個目のやつが一番私の考えと近い.
CarpDay.iconまーす.iconと考え方同じ.というか,はじめは重複に気付かず,$ N^{1/2}, N^{1/3}, ...を求めて,誤差があるのでその前後で条件満たす個数を丁寧に確認して合計求めたけど答えが多すぎ.そこでやっと重複を除去する必要性に気付く.例えば,6乗数を考える場合,6の(1とその数以外の)約数が2と3だから,2乗数と3乗数でカウントした個数を記憶しておいて,その分減らせばいいんじゃね?と実装するもまたNG.64=8x8だから2乗数だけど,64=4x4x4だから3乗数でもある.このようなケースの除去ができないまま残り時間10分になり諦めてC問題へ.
CarpDay.iconコンテスト後に解説確認.公式1つ目の考えだったけど,さらに1つ考えが及ばず.入力例2がヒントになっているだろうなとは気付いたが,公式2つ目の方法まで気付かず.
kakip.iconb>=3かつ平方数でないxを全列挙、b=2は計算で求める。math.isqrt()使わないとWAでる?
CarpDay.iconmath.isqrtなんてあるんだ.int(sqrt())は誤差怖いから,$ \pm 2まで確認していたけど,この関数使えば安心だ!情報ありがとう!
〇G問題
#AtCoder #ABC