/ 最近 .rdf 追記 設定 本棚

log[2022-01-29]



20220129()

最終更: 2023-07-22T23:29+0900

[AtCoder] JOIG 2021/2022 本選 過去問F 問題 タクシ2 (Taxis 2)

 ステップ1

  • タクシーが赤色の場合,乗車後の所持金が a1 円にな
  • タクシーが青色の場合,乗車後の所持金a÷2 を整数に切り捨てた値円にな

1 から出発し,1 円以上の所持金を残した状態で町 Tj​ に到着するために,最初に少なくとも何円の所持金を持っている必要があるか

問題のこの部分はまあ逆に考えます。所持金が1の状態でスタトして所持金が +1 になる×2 になるというようにそうすれば初期金額を探索しなくて良いただしそれぞれの町をスタト地点に設定して町1への最短経路を繰り返し求めるということは許されていないのでスタト地点は町1のままにしておきたい

ところが町1を1円でスタトして+1/×2 しながら各町に着いたときいくらになっているかをダイクトラ法で求めてもサンプルが合わない合わなかった

たぶん-1/÷2 の逆計算は +1/×2 でいいのだけど((((-1)-1)÷2)-1)÷2 の逆計算は ((((×2)+1)×2)+1)+1 ではないとかってるけどその通りに計算できていないとかそういう理由

わからんなりにテーに 2×2 の正方行列に 2 とか 1 とか 0 を割り当てて実際に計算してみれば必要な係数が2つだということとそれをどう変化させればいいのかがわかったスクリトの中の x,y = x,x+yx,y = x+x,y というのがタクシーごとの変化式を見ても意味はわからない

 ステップ2

逆計算がわかったからダイクトラ法で解けたかというと小課題の4あたりから答えが稀にあわなかったり時間をオーバーしたりするした小課題の3までは問題のグラフが木だから複数の経路の競合がなかったのだな

これはたぶんある町における状態というのが所持金というパラメータ1つで優先順位を付けられないせいだと思うっき xy の式を2つ書いたけどそして所持金というのが d = x+y で表されるのだけどある町からある町へ移動するにあたりどちらのタクシーを使っても所持金の変化は x+x+y == d+x で共通しているだけどその次の移動での増加量が x の値にのみ依存するのでx を増加させることで所持金を変化させたタクシーの方が分が悪い

 ステップ3

2つのタクシーの運賃を普通の経済感覚で比べてみるとどの場合でも所持金が1円減るだけの赤色のタクシーを利用できるときは利用して損をすることがないことがわかるたぶん01BFS みたいなステップを踏めば解けるような気がするな

 提出 #28854159 (AC / 1242 Byte / 2410 ms)

頭の中が整理されていないので無駄がまだあると思う(嘘解法の可能性も大いにある)でも1秒しかなかった JOIG-2021-F「デジタルア(Digital Art)(20211210p01) と違って制限時間が4秒もあったので間に合った嬉しい

D 問題まではやるだけだったけどEエゴイ展 (EGOI Exhibition)がまだ解けていない価値の正負と絵の種類で場合分けとクラス分けをして DP をしようとしたんだけど……


PQ#dn_heap がバグってるね不等号の向きが逆これは要するにPQ には繰り返す幅優先探索の無駄を気休め程度に取り除く意味しかなく実際にはその効果さえなかったということ

 提出 #28975251 (AC / 502 Byte / 1158 ms)2410 ms

PQ#dn_heap のバグをとったとしても定数倍が重いせいで初期パラメータが異なる複数の地点をスタト地点に設定した幅優先探索のようなものを距離の更新がなくなるまでぐるぐる回した方が速い優先度付きキーを使うと確かに最短距離を複数回更新するという無駄はないのだけど

Array をキーにするのと Hash をキーにするのでは Hash の定数倍が重いー内で要素が重複することを気にせず Array につっこんだ方が速かったりする

そんな(良くない)理由でメインループ内の前半のループのキーは PQ でも(後半のループのよう) Hash でもなく Array になっている

 提出 #28988344 (AC / 600 Byte / 863 ms)1158 ms

ーを2本持つことでプライオリーを使わないでもソト済みの状態を保ちながらキーを伸ばせる場合があるというのはAtCoder について書いた2番目の日記に書いてある>20190916p01.01今回もこれが使える

863 ms というのは Ruby に限らない AC の中で1ページ目に入っているのだ(全部で9ページではあるのだけど)


20220126() [AtCoder] 精進。第八回 アルゴリズム実技検定-LK番目の絶対値 どうしても Nlog^2 の方法しか思いつかなくて TLE が避けられなかった気がついてみれば単に累積和と二分探索を使うだけの典型も典型だった自分がこれまで見て来なかったのは累積和を使って定数時間で数列のある範囲の和を求めるというときに添字の大小関係は絶対ではないということ。S[j]-S[i] で和を求めるときに、i<j でも j<i でも構わないということ符号を入れ替えればいいだそしてこの問題に関して言えば問われているのが絶対値であることで符号の入れ替えさえ不要だった絶対値が問題を面倒にしているとばかり思っていたぜ提出 #28807480 (AC / 232 Byte / 1853 ms)累積和をソトすることも解を二分探索することも早くからわかっていた二分探索の中で数列をスキャンする中で j<i となるケースを除外するために BIT なりで対数時間の処理を加えてしまうと Nlog^2 になって困ったなーと考えていた事前にじっくり準備して BIT に頼らないデータそれも N×N よりコンパトなデータが作れないかなーと考えていた実は j<i となるケースを除外する必要などなかった累積和の使い方がわかっていない! 精進の道とは自分のアホさを確認する道なの


20220117() [AtCoder] 精進。ABC027-Dロボ( diff)初見ではない埋めきれなかった古い ABC を埋め直している入力に関する制約が解法を制約するヒトになっている一度だけスキャンして答えが出せる縦のものを横に見られるかどう+/- に応じて +x/-x するというのが縦の見かたなら、M に応じて x+1/-1 することが +x/-x する操作にそれぞれ何回寄与するかを考えるのが横からの見かた。提出 #28608177 (AC / 157 Byte / 72 ms)気がつくと簡単に答えが出て気持ちがいい■横からの見かたが培われたのはたぶんこのとき>足し算とはそういうものだと言われたら言葉がない私は足し算がわかりません なんだより難しい類題を解説 AC していたから解けただけだった


20220116() [AtCoder] 精進。ーエスプログラミングコンテ2021-Nov. (AtCoder Beginner Contest 227)-ESwap( diff)D 問題ダメでしたの回の ABC なので E 問題は読んでいなかった考えたのはどうやって状態をまとめることができる並び順を区別してしまうとたとえば K,E,Y がそれぞれ 10 個ずつ使われている場合に 30!÷10!÷10!÷10! > 5.5 兆通り(本当?)の文字列を考えないといけなくなって間に合わない並びではなくてそれぞれの文字をいくつ使ったかとそれだけ使うのに何回の操作を要したかの組み合わせを考えることにしたたとえば KEY を1回ずつ使って長さ3の文字列を構成することを考えるとKEY,KYE,EKY,EYK,YKE,YEK のそれぞれを作るのに要する操作回数は同じになる場合も異なる場合もあるので操作回数ごとにまとめて場合の数を記録するそれら操作回数と場合の数のペアが (K×1;E×1;Y×1) という(長さ3の文字列がとる1つの)状態に対応するこれを長さ0の文字列から始めて1文字2文字と遷移していく DP提出 #28591194 (AC / 1008 Byte / 92 ms)1007 Byte を書き下して実行してみれば文字列が閉じていないというシンタックスエラーを除いてバグ無しでびっくりした入力される文字列長が最大で 30 だから内側のループで線形時間の愚直スキャンをしても許されるのが優しいだからこその ABC-Eったのかもしれないけど……(E 問題はおろか D 問題も解けなかった)■こちらの提出(#27283710)によると公式解説動画でメモ化再帰を紹介していたもようっごく短く書けるっぽい長くはなったけど 92 msPython と比べても速いみたいなので良しとしよう■ダメだった D 問題「実は……と解説に書かれている内容を鵜呑みにして AC をとっただけなので日記にはなりませんでした。提出 #28342280 (AC)■ところでE-Swap に提出した AC スクリトにおける I 変数は昨日あった HHKB プログラミングコンテ2022AtCoder Beginner Contest 235-CThe Kth Time Queryのためのデータと同じ構造をしているC 問題が E 問題を解く道具になっていることが確認できるのはいいね


20220111() [AtCoder] 精進。第九回 アルゴリズム実技検定 過去問-M名前の変更やることは明確で簡単(英語の問題名Deadnamesってこれヒトですよね? 言語差別だ)問題は制約の大きさBIT でやった>提出 #28465041 (AC / 1054 Byte / 2778 ms)提出したスクリトで BIT#index が担当する値から添字を逆引きする処理をこれまで書いたことがなくできるかどうかどうやるのかも知らずデバッグに大変苦労したそういう処理を書かなくても BIT#[] メソドと二分探索を組み合わせて代わりにすることはできるだろうけど計算量が log^2 になるのが問題になりそうだったその失敗は LCA のダブリングを初めて書いたときにすでに経験している>20210617p01.02loglog^2 になったとき 2778 ms が制限時間の4秒におさまるかどうかはどうだろうところでサイズ NBITN より多く確保して許されるかどうかは運でしたPython で一番速い提出では BalancingTree という構造を使っていたが知らない>#28312971その次の人は AVL 木という名前の構造を使っていたが知らない>#28339871Python で一番短くて速い提出が2つのメソドと2つの配列で何をやっているのかはさっぱりわからない>#28288268■どうせ運に任せるのなら N×N の規模の BIT を1つだけ使うのでも良かったのでは?>提出 #28467644 (AC / 757 Byte / 2894 ms)っとだけ遅くなった


20220109() [AtCoder] 昨日あった ABC234-DPrefix K-th Max解けなかったんだよ言い訳がいくつもある一度はプライオリーを貼り付けたしプライオリーを使わないで適当なメモを使ってうまくやる方法もずっと考えていた一番の誤算K 番目に大きい値に対する勘違い解法を一通り検討した後でサンプルを読んで間違いに気がついたこの用語の難しさについては AtCoder 社長のツイトで読んで知っていたのに迷いなく小さい方から K 番目の値を答えようとしていたのだからどうしようもないそこから頭の中をリセトするということがまず難しかったK 個の値を蓄えたプライオリーから最大の値を答えつつK+1 個目の最小値をキーから追い出さなければいけないような気がしてしまって手詰まりに陥っていた意味不明なキメラ言い訳ですよ能力の絶対値が低いところをさまよっているからこういうところでつまづくしそのまま転んでしまうPQ 解法>#28432346 (810 ms)メモ-スラド解法>#28433511 (527 ms)■自分は雰囲気で文字を読んでいる2nd largest だとか for the first time in 10 years だとか K-th max だなんてのは罠なんだmaximum value より大きい値が K-1 個もあるだなんて詐欺なんだ(K-1 個は小さい方にありそう「雰囲気がしない?)中途半端な値は見ようによって大きい値でもあるし小さい値でもある自分に言わせればそれは単「大きい方から K 番目の値なんであって大きい値でも小さい値でもないはい愚痴でした何回も水色に上がれるなんてお得だね(果たして次はあるのか?)


20220107() [BOOX Max2] 3年ちっと前に購入した BOOX Max2先週あたりにバッテリーの具合が急変してたいへんよろしくないどういう状態満充電から 70-80 % まで順当に使用していたと思ったら次の瞬間に残量が 15% を切ったときの警告音が鳴るその後数分で電源が落ちるその落ち方も異常だこれまでならバッテリーが尽きるまで使用を続けていると電源が切れると同時に画面にはバッテリーマークが表示されていた落ちるときにも最後に画面を書き換えるだけの余力を残していたそれが最近の数回はページめくりの途中で乱れた画面を残してボタン操作への反応を喪失してしまう電源ボタン長押しも効かない画面の異常さからフリーズしたのかとあせるけど電源につなげば無事に再起動するだけどほんの5分10分前にはまだバッテリー残量は半分以上残っていたのだし満充電から半日も使用していないのだからバッテリー警告は何かの間違いだと思っていたッテリー容量が7割方どこかへ消失したかのようだそれも徐々に劣化してというのではなくリチウムイオン電池は寒さで見かけの容量が減る(暖めると回復する)けど氷点下でも屋外でもないのだよ過放電で不可逆的に劣化するというけど残り数%まで使ってはいけなかったのか(15%で警告が出てからキリがいいところまでは読みたいじゃない)充電の進捗もおかしいーブルをつなげば残量が10数%あって30分程度かけても 2-3%しか増えない今後は常時ひも付きで使うしかないのかなあっと不便■こういうことをしている人がいたよ20219BOOX MAX2をバッテリー交換して使っています。 |ょうは毒きのこ日和です - 楽天ブログなす: ONIX Boox max2 Battery repair (DIY)■ちなみに 10 年ちっと前に買った Sony Reader (PRS-650) とは使い分けていてそちらは外出&風呂用にしているッテリーの持ちは悪くなってるけど数日は使えるし毎週のように充電している(要するに毎週ではない6日に1回かな)ッテリーの具合は知らんけど予備機も確保してある(そんで思い出した頃に充電している)


20211224() [AtCoder] PAST の支払いチャレンジ支払い方法の案内がなくて実際に手続きを進めるしか知る方法がなかった以前は途中で引き返したけど今日は atcoder.jp のログインパスワドを引っ張り出してきてもう少し先へ進んだ(オンラインサービスが採用する第一の選択肢だと思ってる)クレジトカドだけなんだろうと半ばあきらめていたのだけどインターネトバンキングにも対応していた(銀行決済取り扱い可能な金融機関一覧(20202月現))一覧に利用している銀行名があったので進んだのだけどそういえばインターネトバンキングの利用開始手続きは5年前に断念したっきりだったインターネトバンキングを申し込もうとして利用規定と個人情報の取り扱いについての PDF 2つを流し読みして読みました同意しますとチックを入れたのだがタイムアトで次のページへ移行できなかった読んでないことをチックするためにタイムアトが存在しているクレカを(AtCoder のために)持つよりインターネトバンキングを利用する方がハドルが低いけどどうだろうなあOS が古いとかブラウザが古いとかで弾かれそうなイメージがあるOSWindows 10 にするとか変なプログラムをイールするとかは考えられないよとりあえず次は利用開始手続きに再挑戦するところから


20211223() 今期は運命ちゃん(コゼ)が可愛かった何も知らんかったけどたまたま目に入った1話目で惚れたよねまずはキャラデザの勝利それからキャラクター造形とシナリオの勝利大勝利良かったタイタンいい子


20211222() [AtCoder] 精進ABC003-DAtCoder社の冬(ギリギリ黄 diff)難しいというか場合分けが面倒くさいあるいはうまい考え方があるのかもしれないけどProject Euler72 問目(20110315p01)に出てきたオイラーの φ 関数が関係するような気がするけど四辺の組み合わせを考えるだけなので全部ベタ書きした。提出 #28054417 (AC / 463 Byte / 64 ms)関係するの「ポリアの数え上げ定理」や「バーンサドの(ではない)補題といった異次元キーワかもなんか提出スクリ(#24021051)でやってる足し引きの雰囲気が似てる(←ふわっふわですよ)


20211221() [AtCoder] 改行を詰めるだけのボトに Shortest を7つほど取られてしまった残り3つ■メーリングリトやら GitHub コメトやらコミトログに機械の活動報告が流れてくると人間の活動は必ず数で圧倒されてしまうので良くないと俺は思うそういうログは人間が読むものではなくなって人を遠ざけてしまう


20211219() [AtCoder] 今日は M-SOLUTIONS プロコンオープン2021(AtCoder Beginner Contest 232) があったABCABC の三完を嘆いていたのが先々月のこと>20211010p01今日はついに C 問題が解けなかった>提出 #28000177 (WA / 341 Byte)B 問題でも WA を出した>提出 #27988292 (WA)もう終わりだよ脳細胞が死滅し尽くしている(C 問題が)解けた! 提出 #28019725 (AC / 341 Byte)特に嬉しくはないE 問題Rook Pathった前日に Queen の問題を解いていたのは不思議な偶然>20211218当然のこと Queen の解法が最初に頭に浮かんだけどそれは使えなかったそれもまた当然。提出 #28011903 (AC / 286 Byte / 523 ms)この形の DP 自分が DP を知らなかった昔に DP と知らずに書いたのと同じ形だから一番なじみがある行列累乗で高速化することまでは考えが及びませんが>#28012377 (63 ms でありつつほぼ同時刻の提出!)


20211218() [AtCoder] 精進ABC183-EQueen on Grid( diff)400 万マスのグリド問題グリド全体を一度だけスキャンして答えを出さなければいけない現在のマスにあるクイーンが移動できる先のマスを処理対象にすることはできない現在のマスに移動してくることができるクイーンの移動経路の数が知りたいコンテトの最中と直後は一歩右と一歩下と一歩右下を操作対象にして累積的な効果を持たせることを考えていてできなかった今日は ABC224-EIntegers on Gridを解いたときの記憶があったので(20211023p01.02)どういう記録をつければいいのかすぐにわかった。提出 #27972471 (AC / 292 Byte / 723 ms)わかるときとわからないときの差がわからない論理で舗装した必然の道を敷くことができないんだろうなあとは思うひらめき待ち