結果
問題 | No.144 エラトステネスのざる |
ユーザー |
|
提出日時 | 2022-10-02 00:32:52 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 69 ms / 2,000 ms |
コード長 | 1,984 bytes |
コンパイル時間 | 14,764 ms |
コンパイル使用メモリ | 377,992 KB |
実行使用メモリ | 6,400 KB |
最終ジャッジ日時 | 2024-12-24 06:54:44 |
合計ジャッジ時間 | 14,178 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 17 |
コンパイルメッセージ
warning: unused import: `marker::Chars` --> src/main.rs:6:32 | 6 | use proconio::{fastout, input, marker::Chars}; | ^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default
ソースコード
/** * @cpg_dirspec eratosthenes_zaru * * cpg run -p src/bin/dp/probability/eratosthenes_zaru.rs */ use proconio::{fastout, input, marker::Chars}; // use std::cmp::{max, min}; // use superslice::Ext; // use ac_library_rs::modint::ModInt998244353 as Mint; // use superslice::{self, Ext}; // use derive_new::new; // use indexmap::indexmap; // use std::collections::{BTreeMap, BTreeSet}; // type Map = BTreeMap<String, usize>; // type Set = BTreeSet<(usize, usize)>; // use easy_ext::ext; // use std::collections::{BinaryHeap, VecDeque}; // use collection::{geo_lib::*, utils::read}; /** * 確率DP HSI * * https://yukicoder.me/problems/no/144 * * tags: #DP #確率DP * * 2つリストがある. これらをA、Bをする. * Aは自然数x {x|2<=x<=N} であり、このリストから、最小mi を選んでBに移すことを考える. * この時、確率p でmi の倍数をAから削除する. * Aが空{} になるまで、移動すること操作を行うとき、Bの要素数の期待値を求めよ. * * * 「Bの要素数の期待値」について何を求めるか? * -> 各要素がB に移される期待値の総和 * -> 各要素は独立に計算できて、それぞれカウントは1だから、各要素がB に移される時の確率を求めれば良い!(ei=1*pi=pi {pi: i∈N}) * -> 倍数が削除されるというのは、削除される p の余事象(1-p) * -> 約数全てが削除されないなら、自身が最小となる時にB へ移される * * 6 が B に移される * =2,3 の倍数が削除されない (1-p)^2 2:= 1以上約数 - 1(=自分) * */ #[fastout] fn main() { input! { n: usize, p: f64 } let mut div = vec![0; n + 1]; let mut e = 0.; for k in 2..=n { for m in (k..=n).step_by(k) { div[m] += 1; } e += (1. - p).powf((div[k] - 1) as f64); // 約数が移動されない確率で良い } println!("{:.5}", e); }