最終更新: 2020-05-29T19:43+0900
数弱さんには厳しい回だ
x*A/B - x/B*A
A を掛けてから B で整数除算するか、B で整数除算してから A を掛けるかという違いで生じる値の差について。その最大。
違います。B を周期として第一項と第二項が一致します。A がその周期に与える影響はよくわかりません。
ちなみに B の上限は のため周期全体をテストすることはできません。>提出 #12633357
たぶんその通り。だけど説明を端折
Ruby で提出している他の人は、提出の早さも実行速度も優秀だ
実は B 問題で15分近く詰ま
X = gets.to_i p ((Math.log(X) - Math.log(100)) / (Math.log(101) - Math.log(100))).ceil
でも大まかにしか数字が一致しない。同じかち(複利、小数点以下切り捨て)
」。複利の計算をするごとに切り捨てなければいけないのでは?
B 問題なので手続き的に解いても TLE にならないのはわか
実は C 問題でも30分近く詰ま
再帰をル
上手い人のゲ
当人にと
chokudai(高橋 直大)🌸🍆 Verified Account @chokudai
とはいえ、高度な問題を解く時に、「floorが出てきたら整数部と小数部に分離して式変形!」
https://mobile.twitter.com/chokudai/status/1256806061194874881って結構大切な考え方なので、Dみたいなのを出さないと、後半問題で突然そういう数学力が応用状態で問われることになるので、そのあたりの塩梅がむずかしいよね。
x が固定小数点数で小数部が5桁なら、x - x/100000*100000
が小数部分になる。……という話ではない? D 問題を解くときの話?
以前にもは
kを使
競技プログラミングの強みと「典型力」について - chokudaiのブログった場合のコストは、k-1以下のすべてを使 ったコストより高い
これ100000 > 11111 (2進数)
と同じことなんだけど、自分のような人間は「この一連の操作のコストは(書き換えた要素の数によらず) である」という問題文を読んだだけではたどり着けなくて、上のように事実として示されて2進数で考えてみて初めて了解できることだ
「一を聞いて十を知る(20200508)」
そして自分が AGC022C 700点問題 にまるで歯が立たない理由には、列挙された要素の数とそれらを煮詰める段階の深さに関係があると思
アストロノ
20200315ーカやテラリアですでに知 ってるんだけど、ツリ ー状にねずみ算式に倍々に増えていく要求リソ ースの全体を把握すること、並列に進行する精製過程をスト ールさせないように需給を絶えず調整すること、このサプライチ ェ ーンの階層がある程度以上になると(たぶん3くらい)完全にお手上げにな ってしまう。そういう能力がない。
「たぶん3くらい
」 深さが3、二分木なら葉の数8までしか脳内で扱えないんです。
ち
つまりはこういうことなんでし
chokudai(高橋 直大)🌸🍆 Verified Account @chokudai
「この問題だ
https://mobile.twitter.com/chokudai/status/1255781185390669829ったらこうするだろ」 って感じに無意識にや ってること ってめち ゃめち ゃ多くて、その「無意識」を言語化して列挙するだけでもめち ゃめち ゃ有効だと思うのよねえ。
chokudai(高橋 直大)🌸🍆 Verified Account @chokudai
「chokudaiのアルゴリズム格言1000」とか作
https://mobile.twitter.com/chokudai/status/1255779263514464256って、こういうのをひたすら列挙しまくると、格言の組み合わせだけで良い感じに解ける問題がたくさんできそうだな、と思 っていて、アルゴリズム名とは別レイヤ ーで浸透させたいな、 ってち ょ っと思 ってる。
「解説なんかだと、正しいル
最終更新: 2020-06-15T20:02+0900
日付のあたりに書いた通り解説PDFを読んで実装した。だけどあれ全然答えじ(現在の頂点, 所持している銀貨の枚数) を状態としてdijkstra 法を適用すると、(略) 解くことができます。
」とだけ書かれても、~を状態とする
Wikipedia の「ダイクストラ法」を読みながら雰囲気でPDFに書いてあ
N 個の頂点と銀貨の枚数を組み合わせて状態にするとい
苦しんで何度か書き直すうちに原型を失いつつもす
この段階で他の人の提出を見た>「すべての提出 - AtCoder Beginner Contest 164」。
Ruby での全提出は1ペ
ダイクストラ法に立ち返らないといけないかと思
M.times.map
の .map がいらない。す
自分に欠けていた工夫が2つあ
特に2番目は効果が大きいんじ
それはそれとして、Python は AC だけに限
読めない記述がある。この行
(v = V[n]&.&SM) ? (next if v>=s || v>2500) : R << [n,t]
演算子(に見えるがメソ1&3
と 1.&(3)
は同じ意味になる。でも &.&
をどう解釈すればよいか。SM はただの数値変数だからブロ
他にもアロ
ブロ.map(&f)
とか .map(&:to_i)
とか書けるときには積極的に書いていきたいんだけど、.to_i
ではなく .to_i(2)
を適用したくなると途端に .map{|_|_.to_i(2)}
と書かなければいけなくなる。.to_i に 2 (と self)を予め束縛した関数がサ.map{_1.to_i(2)}
と書けますよ、ということ。たぶん。まだ試したことない。
- 引数の評価が行なわれない
- メソ
ッド呼び出しが行われない - nil を返す
&.&
が何だ
51 ms 縮ま
嬉しい! 自分で解釈して手を動かして理解してる! 立派! 自分で好き勝手書くより他人の考えをトレ
タイムが縮んでるのはホ
あと自分は意味まとまりのある変数群を一行で定義するために多重代入を多用するんだけど、実は字数が減るわけではないし、多重代入式に対応する配列値が作り捨てられているとしたら、も
地味に変数の定義位置をずらして無駄な計算を減らしたりもしてる。自分は変数の定義をひとつにしたいがために効果のない値([0,0]
とか)を使用して効果のない加算を実行してたりするんだけど、贅沢ではある。関連>20181029。
(自分の提出だよ)
z, y = 2[v]+a, 3[v]+a # z < y if z < s c, d = s < y ? X[v][s-a,3[v]] : [0,0]
X[v] が返す関数が受け取る引数2つ(s-a
と 3[v]
)はその差だけに意味があるから、両方に a
を足して、X[v][s,y]
とすると引き算1つと配列アクセス1つが省略できる。そもそもが引数が2つある冗長性から生じた無駄であるな。
こういう楽しみがあるのはスクリプトならではなんだよなあ。C++ コンパイラにかかると本質的でない差異は全部同じにされてしまう。そこに性能を犠牲にせずに読みやすい表記を追求する余地があるとも見られるんだけど。
もう一度asmコ
ードをよく読むと不要なはずの配列の初期化が走 ってる模様. デフ ォルトcstrは空のはずなんだけどと自分のコ ードを見直すと、FpDblクラスだけ配列の初期化が入 っていた. う
4月15日っかりいれち ゃ っていた模様. 削除するとgcc-7.5で13%高速化. おおこいつのせいだ ったのか. それでもclang-8より4%ほど遅いけど気がす っきりした. でも配列の初期化で1割変わるというのは(clangは速いだけに)何か変なことしてるのかな.
プログラマに指示されたらコンパイラは無視できない(こともある? clang の場合をどう解釈する?)。結果に影響しない表面上はささいに見える違いが思わぬペナルテ
プライオリテ
richvote さんの提出は、自分が最初唯一の TLE を食ら
それはさておいて、俺の目には2つのプライオリテ
loop{}
と書くより while 0; end
と書く方が速いというように、気をつけておくと得する書き方がまだあるみたい。だけどわからん。
require 'benchmark' N = 10_000_000 Benchmark.bm{|x| x.report('多重'){ N.times{ a,b,c = 1,2,3 } } x.report('代入'){ N.times{ a=1;b=2;c=3 } } }
これを Ruby 2.5 で実行してみた。
> ruby25 a.rb user system total real 多重 1.591000 0.000000 1.591000 ( 1.585992) 代入 0.967000 0.000000 0.967000 ( 0.969697)
多重代入遅いなあ。(bm メソ
あと最近驚いて、確かめてみたら Ruby 1.8 の昔から一貫して同じ挙動だ
i, a = 0, [0,1,2] # 準備 i, a[i] = 2, i # どうなる? puts "i=#{i}; a=#{a.inspect}" #=> i=2; a=[0, 1, 0]
最初に右辺を評価して、それから左辺の評価と代入を左から順番に実行していく感じかな? 右辺の一時記憶が必要?
多重代入は遅くて時々評価順が難しい、というのが現在の評価。
? 2.6 でデフ
-----BEGIN RSA PRIVATE KEY-----
直後の空行と -----END RSA PRIVATE KEY-----
直前の空行を詰めたら受け付けた。なんで空行があgit update-git-for-windows
というサブコマンドはなか