bouzuya.hatenablog.com

ぼうずやのにっき

仕事でのフリーレンの話 / Slay the Spire サイレント A9H / PAST #8 L

昼休みに保険の登録されている電話番号を変更してきた。昼休みはご飯を食べて横になりたいけど半端な感じになった。

まだせきは出ている。息苦しさが消えない。

仕事でフリーレンの話題になった。つらくくるしい旅よりくだらなくて楽しい旅がいいねという話。 Rust 選んだのもだいたい同じだねって。


Slay the Spire サイレント A9H

  • ボスレリックはパンドラの箱・コーヒードリッパー
  • 攻撃は腹裂き・無力化・レターオープナー・ティンシャ
  • 防御は鳥頭壺・足払い・無力化
  • 策士・2x策士+・集中・2xアクロバット・3xアクロバット+などによるループ
  • 一層は懐中時計で凌いだ・ボスレリックのパンドラの箱で一気にほぼループ状態に
  • 二層は懐中時計からほぼループに移行。鳥頭壺が手に入ったのでコーヒードリッパーを選択
  • 三層は用意周到が手に入っていよいよ危なげなし
  • タイムイーターは攻撃力の低さから危なそうだったけど、二層から温存していた狂信者ポーションで抜けた
  • 残りは消化試合
  • 0 コストのブロックやアタックがあるだけでもっと楽できたはず
  • クナイや手裏剣・あるいはそろばんなどがうまく手に入ればもっと早く勝てそうだった

use proconio::input;

fn main() {
    input! {
        n: usize,
        k: usize,
        a: [i64; n],
    }

    let mut s = std::iter::once(0)
        .chain(a.iter().scan(0, |acc, &i| {
            *acc += i;
            Some(*acc)
        }))
        .collect::<Vec<i64>>();

    s.sort();

    let mut ok = 1_i64 << 60;
    let mut ng = -1_i64;
    while ok - ng > 1 {
        let x = (ok + ng) / 2;

        let mut count = 0_usize;
        let mut l = 0_usize;
        let mut r = 0_usize;
        for i in 0..=n {
            while s[l] < s[i] - x {
                l += 1;
            }
            while r < n && s[r + 1] <= s[i] + x {
                r += 1;
            }

            count += r - l;
        }

        if count >= 2 * k {
            ok = x;
        } else {
            ng = x;
        }
    }

    println!("{}", ok);
}

今日のコミット。