bouzuya.hatenablog.com

ぼうずやのにっき

Impulse Blocker という Firefox アドオンをインストールした

Impulse Blocker という Firefox アドオンをインストールした。バージョンは 1.2.0 。

配布ページ: https://addons.mozilla.org/ja/firefox/addon/impulse-blocker/ ソースコード: https://github.com/raicem/impulse-blocker 使い方: https://blog.cemunalan.com.tr/2017/05/17/impulse-blocker-guide/

これは指定のドメインをブロックしてアクセスできなくするアドオン。ブロックされているドメインのページにアクセスしようとすると Impulse Blocker のメッセージが表示されアクセスできなくなる。例えば www.youtube.com なら Your impulse to visit www.youtube.com is successfully blocked! と表示される。

ツールバーにアイコンが表示され、 ON/OFF の切り替えや 5 分だけ OFF にしたりできる。

ぼくはこれを YouTubeTwitter へのアクセスのブロックするために使ってみている。入れてみて気づいたことには手癖のように Twitter へアクセスしていること。 Android 側では Digital Wellbeing で時間制限できているのだけど PC 側はしていなかった。これで結構な時間の節約になりそうだ。


ABC079 : AtCoder Beginner Contest 079 の A, B, C, D を解いた。

use proconio::{input, marker::Usize1};

fn dijkstra(n: usize, inf: usize, e: &[Vec<(usize, usize)>], s: usize) -> Vec<usize> {
    use std::{cmp::Reverse, collections::BinaryHeap};
    let mut d = vec![inf; n];
    let mut pq = BinaryHeap::new();
    d[s] = 0;
    pq.push(Reverse((0, s)));
    while let Some(Reverse((w_u, u))) = pq.pop() {
        if w_u > d[u] {
            continue;
        }
        for (v, w_v) in e[u].iter().copied() {
            let w = w_u + w_v;
            if w < d[v] {
                d[v] = w;
                pq.push(Reverse((w, v)));
            }
        }
    }
    d
}

fn main() {
    input! {
        h: usize,
        w: usize,
        c: [[usize; 10]; 10],
        a: [[i64; w]; h],
    };

    let mut edges = vec![vec![]; 10];
    for i in 0..10 {
        for j in 0..10 {
            edges[i].push((j, c[i][j]));
        }
    }

    let mut dists = vec![];
    for i in 0..10 {
        let d = dijkstra(10, 1 << 60, &edges, i);
        dists.push(d[1]);
    }

    let mut ans = 0_usize;
    for i in 0..h {
        for j in 0..w {
            if a[i][j] == -1 {
                continue;
            }
            ans += dists[a[i][j] as usize];
        }
    }

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

今日のコミット。