Submission #20960144


Source Code Expand

fn main() {
    let (r, w) = (std::io::stdin(), std::io::stdout());
    let mut sc = IO::new(r.lock(), w.lock());

    let n: usize = sc.read();
    let m: usize = sc.read();
    let mut slots = vec![];
    for _ in 0..m {
        let c: usize = sc.read();
        let cost: f64 = sc.read();
        let mut dist = vec![];
        for _ in 0..c {
            let id = sc.usize0();
            let p: f64 = sc.read();
            dist.push((id, p / 100.0));
        }
        slots.push((cost, dist));
    }

    let mut dp = vec![0.0; 1 << n];
    for mask in (0..(1 << n)).rev() {
        let mut candidates = vec![];
        for slot in &slots {
            let cost = slot.0;
            let mut sum_p = 0.0;
            let mut already_have = 0.0;
            let mut not_have = vec![];
            for &(id, p) in &slot.1 {
                if mask & (1 << id) != 0 {
                    already_have += p;
                } else {
                    not_have.push((p, id));
                }
            }
            if not_have.is_empty() {
                continue;
            }

            let part = 1.0 - already_have;
            let e = cost / part;
            for (p, id) in not_have {
                let p = p / part;
                let next_mask = mask | (1 << id);
                sum_p += (dp[next_mask] + e) * p;
            }
            candidates.push(sum_p);
        }

        if candidates.is_empty() {
            continue;
        }

        candidates.sort_by(|a, b| a.partial_cmp(b).unwrap());
        dp[mask] = candidates[0];
    }
    print!("{}", dp[0]);
}

pub struct IO<R, W: std::io::Write>(R, std::io::BufWriter<W>);

impl<R: std::io::Read, W: std::io::Write> IO<R, W> {
    pub fn new(r: R, w: W) -> IO<R, W> {
        IO(r, std::io::BufWriter::new(w))
    }
    pub fn write<S: ToString>(&mut self, s: S) {
        use std::io::Write;
        self.1.write_all(s.to_string().as_bytes()).unwrap();
    }
    pub fn read<T: std::str::FromStr>(&mut self) -> T {
        use std::io::Read;
        let buf = self
            .0
            .by_ref()
            .bytes()
            .map(|b| b.unwrap())
            .skip_while(|&b| b == b' ' || b == b'\n' || b == b'\r' || b == b'\t')
            .take_while(|&b| b != b' ' && b != b'\n' && b != b'\r' && b != b'\t')
            .collect::<Vec<_>>();
        unsafe { std::str::from_utf8_unchecked(&buf) }
            .parse()
            .ok()
            .expect("Parse error.")
    }
    pub fn usize0(&mut self) -> usize {
        self.read::<usize>() - 1
    }
    pub fn vec<T: std::str::FromStr>(&mut self, n: usize) -> Vec<T> {
        (0..n).map(|_| self.read()).collect()
    }
    pub fn chars(&mut self) -> Vec<char> {
        self.read::<String>().chars().collect()
    }
}

Submission Info

Submission Time
Task C - ソーシャルゲーム
User kenkoooo
Language Rust (1.42.0)
Score 100
Code Size 2871 Byte
Status AC
Exec Time 8 ms
Memory 2204 KiB

Judge Result

Set Name A B C D E all
Score / Max Score 10 / 10 10 / 10 10 / 10 20 / 20 20 / 20 30 / 30
Status
AC × 4
AC × 11
AC × 20
AC × 39
AC × 12
AC × 59
Set Name Test Cases
A test_01_ABCDEF.txt, test_02_ABCDEF.txt, test_03_ABCDEF.txt, test_12_ABCDEF.txt
B test_01_ABCDEF.txt, test_02_ABCDEF.txt, test_03_ABCDEF.txt, test_04_BCDF.txt, test_05_BCDF.txt, test_06_BCDF.txt, test_07_BCDF.txt, test_08_BCDF.txt, test_09_BCDF.txt, test_11_BCDF.txt, test_12_ABCDEF.txt
C test_01_ABCDEF.txt, test_02_ABCDEF.txt, test_03_ABCDEF.txt, test_04_BCDF.txt, test_05_BCDF.txt, test_06_BCDF.txt, test_07_BCDF.txt, test_08_BCDF.txt, test_09_BCDF.txt, test_10_CF.txt, test_11_BCDF.txt, test_12_ABCDEF.txt, test_13_CF.txt, test_14_CDF.txt, test_15_CDF.txt, test_16_CF.txt, test_17_CF.txt, test_18_CF.txt, test_25_CDF.txt, test_26_CDF.txt
D test_01_ABCDEF.txt, test_02_ABCDEF.txt, test_03_ABCDEF.txt, test_04_BCDF.txt, test_05_BCDF.txt, test_06_BCDF.txt, test_07_BCDF.txt, test_08_BCDF.txt, test_09_BCDF.txt, test_11_BCDF.txt, test_12_ABCDEF.txt, test_14_CDF.txt, test_15_CDF.txt, test_19_DEF.txt, test_20_DF.txt, test_21_DF.txt, test_22_DF.txt, test_23_DEF.txt, test_24_DF.txt, test_25_CDF.txt, test_26_CDF.txt, test_27_DEF.txt, test_28_DF.txt, test_29_DF.txt, test_30_DF.txt, test_31_DEF.txt, test_32_DF.txt, test_33_DF.txt, test_34_DF.txt, test_35_DEF.txt, test_36_DF.txt, test_37_DF.txt, test_38_DF.txt, test_39_DEF.txt, test_40_DF.txt, test_41_DF.txt, test_42_DF.txt, test_44_DF.txt, test_52_DF.txt
E test_01_ABCDEF.txt, test_02_ABCDEF.txt, test_03_ABCDEF.txt, test_12_ABCDEF.txt, test_19_DEF.txt, test_23_DEF.txt, test_27_DEF.txt, test_31_DEF.txt, test_35_DEF.txt, test_39_DEF.txt, test_49_EF.txt, test_51_EF.txt
all 00_sample_01_F.txt, 00_sample_02_F.txt, 00_sample_03_F.txt, 00_sample_04_F.txt, 00_sample_05_F.txt, test_01_ABCDEF.txt, test_02_ABCDEF.txt, test_03_ABCDEF.txt, test_04_BCDF.txt, test_05_BCDF.txt, test_06_BCDF.txt, test_07_BCDF.txt, test_08_BCDF.txt, test_09_BCDF.txt, test_10_CF.txt, test_11_BCDF.txt, test_12_ABCDEF.txt, test_13_CF.txt, test_14_CDF.txt, test_15_CDF.txt, test_16_CF.txt, test_17_CF.txt, test_18_CF.txt, test_19_DEF.txt, test_20_DF.txt, test_21_DF.txt, test_22_DF.txt, test_23_DEF.txt, test_24_DF.txt, test_25_CDF.txt, test_26_CDF.txt, test_27_DEF.txt, test_28_DF.txt, test_29_DF.txt, test_30_DF.txt, test_31_DEF.txt, test_32_DF.txt, test_33_DF.txt, test_34_DF.txt, test_35_DEF.txt, test_36_DF.txt, test_37_DF.txt, test_38_DF.txt, test_39_DEF.txt, test_40_DF.txt, test_41_DF.txt, test_42_DF.txt, test_43_F.txt, test_44_DF.txt, test_45_F.txt, test_46_F.txt, test_47_F.txt, test_48_F.txt, test_49_EF.txt, test_50_F.txt, test_51_EF.txt, test_52_DF.txt, test_53_F.txt, test_54_F.txt
Case Name Status Exec Time Memory
00_sample_01_F.txt AC 8 ms 2080 KiB
00_sample_02_F.txt AC 2 ms 2072 KiB
00_sample_03_F.txt AC 2 ms 2096 KiB
00_sample_04_F.txt AC 2 ms 2072 KiB
00_sample_05_F.txt AC 2 ms 2140 KiB
test_01_ABCDEF.txt AC 2 ms 2072 KiB
test_02_ABCDEF.txt AC 2 ms 2184 KiB
test_03_ABCDEF.txt AC 2 ms 2112 KiB
test_04_BCDF.txt AC 2 ms 2140 KiB
test_05_BCDF.txt AC 2 ms 2068 KiB
test_06_BCDF.txt AC 2 ms 2088 KiB
test_07_BCDF.txt AC 2 ms 2092 KiB
test_08_BCDF.txt AC 2 ms 2184 KiB
test_09_BCDF.txt AC 2 ms 2148 KiB
test_10_CF.txt AC 2 ms 2008 KiB
test_11_BCDF.txt AC 2 ms 2076 KiB
test_12_ABCDEF.txt AC 2 ms 2088 KiB
test_13_CF.txt AC 1 ms 2108 KiB
test_14_CDF.txt AC 2 ms 2124 KiB
test_15_CDF.txt AC 2 ms 2128 KiB
test_16_CF.txt AC 2 ms 2140 KiB
test_17_CF.txt AC 2 ms 2076 KiB
test_18_CF.txt AC 2 ms 2128 KiB
test_19_DEF.txt AC 2 ms 2060 KiB
test_20_DF.txt AC 2 ms 2132 KiB
test_21_DF.txt AC 2 ms 2084 KiB
test_22_DF.txt AC 2 ms 2100 KiB
test_23_DEF.txt AC 2 ms 2060 KiB
test_24_DF.txt AC 2 ms 2092 KiB
test_25_CDF.txt AC 2 ms 2044 KiB
test_26_CDF.txt AC 2 ms 2092 KiB
test_27_DEF.txt AC 1 ms 2128 KiB
test_28_DF.txt AC 2 ms 2088 KiB
test_29_DF.txt AC 2 ms 2100 KiB
test_30_DF.txt AC 1 ms 2192 KiB
test_31_DEF.txt AC 1 ms 2108 KiB
test_32_DF.txt AC 1 ms 2176 KiB
test_33_DF.txt AC 1 ms 2108 KiB
test_34_DF.txt AC 2 ms 2116 KiB
test_35_DEF.txt AC 1 ms 2016 KiB
test_36_DF.txt AC 2 ms 2020 KiB
test_37_DF.txt AC 2 ms 2084 KiB
test_38_DF.txt AC 2 ms 2168 KiB
test_39_DEF.txt AC 2 ms 2124 KiB
test_40_DF.txt AC 1 ms 2104 KiB
test_41_DF.txt AC 2 ms 2056 KiB
test_42_DF.txt AC 2 ms 2072 KiB
test_43_F.txt AC 3 ms 2172 KiB
test_44_DF.txt AC 2 ms 2184 KiB
test_45_F.txt AC 2 ms 2148 KiB
test_46_F.txt AC 1 ms 2168 KiB
test_47_F.txt AC 3 ms 2020 KiB
test_48_F.txt AC 1 ms 1956 KiB
test_49_EF.txt AC 3 ms 2164 KiB
test_50_F.txt AC 2 ms 2188 KiB
test_51_EF.txt AC 2 ms 2204 KiB
test_52_DF.txt AC 2 ms 2072 KiB
test_53_F.txt AC 2 ms 2168 KiB
test_54_F.txt AC 2 ms 2004 KiB