最終更新: 2023-02-08T02:07+0900
a = b = 0 # 初期化 a += b += a += 1 # 本題 p a #=> 1? 2?
右から順番に a に 1 を足して(a=1)、b に a を足して(b=1)、a に b を足して(a=2)、と考えると間違える。「自己代入」を読むと「この形式の代入は
」と書かれている。一番右の 式1 = 式1 op 式2
と評価されます。ただし、op が &&, || の場合には(略)a += 1
が評価される前に一番左の a +=
が a = a +
と分解されていて古い a の値が評価中の式の値として一時的に記憶されているのだと考えられる。a の値は 1 になる。ちなみに C++ では 2 になった。
この前の ABC288-D が解けなかった理由のひとつにはこの罠に気がつかなくて合わせるべき数字がそもそも間違っていたということがある。それがなくても解けなかったのもたしかだけど。
みんなで「いじめ」をゆるさない」。こういう全体思想、連帯思考がいじめの背後に構造的にあると思ってる。つまり、個々人がばらばらなら諍いがあってもそれは喧嘩と呼ばれるのであり、集団対集団でも別の呼び方があるとして、いじめと呼ぶときには被害者が個人であるのに対して加害者傍観者が集団として存在していることが想定されていると思う。群れがなければいじめは存在しない道理。それなのに「
みんなで」と連帯を呼びかけるとは。「
ゆるさない」という強い言葉で正当化される非難や暴力の存在を示唆するとは。怖いよ。いじめは人間関係の淀みなのであり人間を集団にすればそれも未成熟な人間を集団にすれば水が低いところに集まるように必ず生じるものだと思う。プレッシャーをかけて何が解決する。理想的には対話によって被害者の人間性が回復できればいいけど、それ以外には距離を取らせる、避難場所を用意する以外に何ができる。恐怖で支配する? 全員を均質なロボットにする? 人間の密度を下げる?(人間をふくらませるという意味ではありません)。密度を下げるのは衝突を減らすのに効果がありそうではある。
nc = [n/c-1,0].max*c
. N を LCM(A,B) と半端に分けて考える代わりに、LCM(A,B)1回分と半端をその他として取り分けて考える。正直よくわかりません。一晩経ってひらめいて試したら AC だっただけ。■■■@kyopro_friends「1 以上 N 以下の整数のうち、2 以上 M 以下の数を約数に持たないものの個数を求めて下さい。[制約] *1≦N≦10^{16} *1≦M≦20 *入力はすべて整数」 DP と包除原理でサンプルの2までは答えが合った>解答。M≦72 のサンプル3は TLE になる。むむむ。関連するマシュマロ質問に「素数の積」とあったので素数だけを取り出してみたらサンプルの3も合ったっぽい(先頭と末尾の数桁の一致を確認)>解答2。まだまだだなあ。■@2023-01-26 今日のお風呂での話。20230124 に中国剰余定理で解いた ABC286-F「Guess The Number 2」の反芻をしているときに、kyopro_friends さんの即興問題とのあいだの共通点に考えが広がって、もてあそんでいるときに「この問題なら、最初から割り算で計算すればオーバーフローのことを気にする必要はないけどねー」の意味がひらめいた。自分の解答2でいうと最後から2行目に N/c という式があって、c というのが素数の積。C++ のように整数型のビット長が固定の言語では c がオーバーフローするおそれが現実的な範囲にある。ここで、割る数(c)を大きくする代わりに割られる数(N)を小さくしていくのも同様にありだなーと、あのツイートはこういう意味だったのかと、一日遅れで頭に血が巡ってきたという話。これがファイナルアンサー>解答3。割る数(a)は M 以下だし割られる数(n)は N 以下。入力を超える数がないからオーバーフローもない。f^k(i) = i
になった瞬間に変化が止まるよね。循環させられなくない?■@2023-01-24 1回1回 A 数列を置き換えるとは書いてないのかな。うっかり者の役に立つサンプルをくれ。■N を探索する愚直解法と中国剰余定理を愚直に解く解法ができた。でも P = 2,3,5,7,11,13,17,23,29
としたとして P.sum = 110
、P.inject(:*) = 340510170
なんだけど、N の上限が 10^9 だから 10**9/340510170 = 2.93
ということで確率3割の当てもんになる。え、どうするの? 何回でも提出する? 法に合成数を使うことで何か変わる? なんでそんな意地悪するの?■提出 #38300369 (AC / 904 Byte / 78 ms)。29 を除いて 2 と 3 を 4 と 9 に置き換えることで P.sum = 108
、P.inject(:*) = 1338557220 > 10**9
にできた。今日の収穫は、中国剰余定理の答えを愚直に求めても許されるとわかったこと。小さい方の法の大きさを上限とするステップで答えが見つかる。これからは中国剰余定理わかりませんであきらめなくて良さそう。