最終更新: 2021-04-30T21:11+0900
「10分間3問早解き」回だ
AC のき
chokudai(高橋 直大)ナス@chokudai
D問題、非連結です
Twitterって言うだけでDiff400くらい落ちそう
chokudai(高橋 直大)ナス@chokudai
非連結です
って言 っても落ちないわ(サンプルにあるし) 連結で出題しないと400落ちなさそう。
Twitter
「連結で出題しないと落ちない
」がよくわからないけど、ともかく、非連結なら問題を分割できるじ
サンプル4つのうち2つが辺がゼロのケ
テストケ
しかしまだ TLE。どういう木が嫌か考えると、この提出は次のような入力に弱い。
だけど次のように番号の付け方を変えただけで問題が問題でなくなる。
たぶん頂点を次数でソ
ソ
DFS の処理順を次数の降順にしたら悪くなりにくいのか、343 ms からタイムが大いに改善した。このムラが DFS の沼であり抜け出せない楽しみなんだよなあ>20201101p02、20201107p01.05。
最終更新: 2021-06-11T11:27+0900
以前書いた。「最初に右辺を評価して、それから左辺の評価と代入を左から順番に実行していく感じかな? 右辺の一時記憶が必要? 多重代入は遅くて時々評価順が難しい、というのが現在の評価。」「クイズです。a の結果を確認してから予想してカンマを付けたら予想通りの結果にな
そしてこの PR が多重代入について>Evaluate multiple assignment left hand side before right hand side by jeremyevans · Pull Request #4390 · ruby/ruby マ
3.1.0 から変わりそう? 評価順が変わ
従来は2が最初にあ
パフ
いやあ、あ
非効率だしバグらせやすいし、作り込む価値がないと言
自分はもうこの仕様について(穴にはま
最終更新: 2021-06-08T15:01+0900
昨日あ
本番中は TLE で終わ
制限時間が大盤振る舞いの5秒なんだよね。
桁を1つ2つ減らすだけで時間がだいぶ違うだろうという予測はできたけど、減らし方がわからなか
TODO: Array#all? の中のテストは l<=r
より l==r||l+1==r
の方が厳しくて良い。
TODO: 和の先頭の桁が1だとすぐにわかる場合がある。
TODO: 列挙してから弾くより列挙しない方がいい。(確定桁が1つあ
TODO: ル
現在 Ruby での AC 提出は 20。実行時間が 109 ms から 4845 ms までと幅広い。中央値は3秒台です。
たとえば(4桁 ms では最も速い)約 1.6 秒のこの提出>#21688714
先頭桁が0のケ
それと、全くの想定外だ
3つある3桁 ms の提出が何をや
4つの TODO を意識して書いたけど、妥協した部分もある。
とはいえ、これを深さ優先探索で妥協なく書き換えただけで2桁 ms になる? そう、Ruby で現在最速の提出は 71 ms にな
根本的なところで、列挙してから弾くか、可能性のある組み合わせだけを列挙するかという違いがあるのかな。そ
書けなか
WA の原因は非ゼロチ
雑に総当たりしていたのを反省して(TLE は嫌だ!)、数か月ぶりに書き直した。提出 #21743445 をベ
A = 'FDCAJH'.bytes.to_a # to_a is for Ruby 1.8/1.9 B = 'IBCFEH'.bytes.to_a P = 'FBAECIIJEGIH'.bytes.to_a C2D = [nil]*91 D2C = [nil]*10 NZ = [-1]*91; NZ[A[0]] = NZ[B[0]] = NZ[P[0]] = 0 F = lambda{|i,carry,aa,bb,zz| next carry<1 if i<-P.size a = (c = A[i]) ? C2D[c] : 0 b = (c = B[i]) ? C2D[c] : 0 if a next D2C.each_with_index.any?{|e,d| next if e || d==NZ[c] C2D[c],D2C[d] = d,c next F[i,carry,aa,bb,zz] || C2D[c] = D2C[d] = nil } unless b prd = a*bb+b*aa+a*b*zz+carry if p = C2D[c=P[i]] next p==prd%10 && F[i-1,prd/10,a*zz+aa,b*zz+bb,zz*10] else p = prd%10 next if D2C[p] || p==NZ[c] C2D[c],D2C[p] = p,c next F[i-1,prd/10,a*zz+aa,b*zz+bb,zz*10] || C2D[c] = D2C[p] = nil end } raise unless F[-1,0,0,0,1] puts [A,B,P].map{|a|'%*d'%[P.size,a.inject(0){|b,c| b*10+C2D[c] }]}
最終更新: 2021-06-02T21:11+0900
緑がほぼ埋ま
だから青色。難しか
今回も一発 AC とはいかなか
たとえば赤か青の片方が極端に多いとき、外側に広が
しかしそれを想定するとコ
ちなみにこの提出の方針は……。赤と青をそれぞれ -100 と 100 を中心にして原点の左右で平らに並べる。原点は超えない。数が多ければ外側により大きく広がる。そのあとで緑色を原点を中心として配置していく。左右のコストを比較して赤と青を押しのけながら。
提出に至らなか
「J - 長い長い文字列」(提出 #19035422) とか、「K - 転倒数」(提出 #18029328)とか、脳みそに余裕がなくなるとクラスや日本語変数がソ
イメ
Ruby の他の提出を見るとゴルフをしていなくても 300 バイト台の短い提出がいくつもあるし、内容も、候補を並べて最小値を選ぶ、二分探索で解(極小値)を探すなど、特に大層な道具は必要としていない。それは、頭の中で十分に理解して整理できているから書けるんだよなあ。
できないからソ
たぶん抗力の計算が間違
押した力を上限として0以上それ以下の力しか発生しないはずだけど、なんだか負の抗力によ
これが問題にならない理由もわかるけど、それはクラスの外部、インスタンスの利用方法にあるのであ
最終更新: 2021-06-08T15:27+0900
ABC の4問目で 400 点問題。しかし青diffではある。
時間制限を 10 秒にしてくれたらたぶん通る。しかし実際の制限は2秒であり、3秒ですらない。慈悲はないのか。
Ruby の提出一覧を見ると AC していても軒並み1秒越えであり、処理量がしんどい問題なのは間違いないのだけど、その中にあ
入力を正負ゼロに分けて、正負ゼロの積がそれぞれいくつ作られるかをまず求めた。
負の積が K 個かそれより多いならば、正の数と負の数のペアを考える。ゼロは特に考えることがない。K 番目が正の積の中に含まれているなら、負の数同士のペアと正の数同士のペアを考える。
これで考えるべき組み合わせが多少は減
それでどうしているか。
K 番目の数を -10^{18} から 10^{18} の範囲で二分探索している。
ペアを、ある数とそれに掛け合わせるソ
ペアの数が馬鹿にならない。N (≦2×10^5) のオ
とまあ、こんな感じ。(3つだが三重ではない)二重の二分探索のあいだに、範囲を絞
ソ
この回 は「C 問題が解けなくて大爆死した回の ABC」。その後 C 問題を解いて、F 問題も解いたけど、「F 問題が解けたら D と E も解けたつもりでいいんじ
え
今日の日記のタイトルは「D 問題 Pairs」です。関連は?
これまで二分探索といえばソ
という気付きが Pairs を解く過程で(まだ解けてないけど)得られていたので、今度はごく素直に、解を決め打
二分探索を使
脳みそが不自由だと存在しない制約で思考が枷をはめられてしまうのだなあ。最も基本的なツ
ところで 350 ms は Ruby で2番目に速い提出なのだけど、どんぐりの背比べである2番目とそれ以降から頭ひとつ抜けて速いのがこの 提出 #15632506 (sushibon さん / 219 ms)。二分探索は行
二分探索というのは人間が考えることを放棄して機械に試行錯誤させる解法なのだけど、人間が頭を使えば無駄なく速く答えを求めることができるのですね。まあ、何をどう考えればいいのかわかりませんけども。
これも空中二分探索。解を決め打
Ruby では唯一3桁 ms に入
同じ青diffでもこちらのほうが Pairs よりわずかに難しいことにな
しかしこれは簡単な Pairs ということでいいんではないか? だ
概ね 300 ms から 500 ms の間におさま
ル
や
どこでオ
ヒントはこの問題の前に解いた射撃王にあ
実際のところ、二分探索の代わりに shift/pop を繰り返すようにしただけ。
261 ms の提出を読んだ。A 数列の値から添字を得る逆引きインデ
言われてみれば、そうだね、という感じ(だけど思いつかなか
や
これもや
ところで、ぎりぎり3桁 ms には入