提出 #22119383


ソースコード 拡げる

use std::time::Instant;

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 k: usize = sc.read();

    let mut no = vec![vec![false; n]; n];
    for _ in 0..m {
        let a: usize = sc.read();
        let b: usize = sc.read();
        no[a][b] = true;
        no[b][a] = true;

        assert!(a < b);
    }

    let start = Instant::now();

    let mut ok = 0;
    let mut ng = 0;
    let mut rng_state = 717;
    loop {
        if start.elapsed().as_millis() > 3000 {
            break;
        }
        let mut p = (0..n).collect::<Vec<_>>();
        for _ in 0..k {
            let i = xor_shift_64(&mut rng_state) % n;
            let mut j = xor_shift_64(&mut rng_state) % (n - 1);
            if i <= j {
                j += 1;
            }
            p.swap(i, j);
        }
        let is_ok = (0..n).all(|i| !no[p[i]][p[(i + 1) % n]]);

        if is_ok {
            ok += 1;
        } else {
            ng += 1;
        }
    }

    println!("{}", ok as f64 / (ok + ng) as f64);
}

fn xor_shift_64(state: &mut usize) -> usize {
    let mut x = *state;
    x ^= x << 13;
    x ^= x >> 7;
    x ^= x << 17;
    *state = x;
    x
}

pub trait NextPermutation {
    fn next_permutation(&mut self) -> bool;
}

impl<T> NextPermutation for [T]
where
    T: PartialOrd,
{
    fn next_permutation(&mut self) -> bool {
        if self.len() < 2 {
            return false;
        }

        let mut i = self.len() - 1;
        while i > 0 && self[i - 1] >= self[i] {
            i -= 1;
        }

        if i == 0 {
            return false;
        }

        let mut j = self.len() - 1;
        while j >= i && self[j] <= self[i - 1] {
            j -= 1;
        }

        self.swap(j, i - 1);
        self[i..].reverse();
        true
    }
}

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()
    }
}

提出情報

提出日時
問題 D - シャッフル席替え
ユーザ kenkoooo
言語 Rust (1.42.0)
得点 100
コード長 3199 Byte
結果 AC
実行時間 3009 ms
メモリ 2168 KiB

ジャッジ結果

セット名 all
得点 / 配点 100 / 100
結果
AC × 71
セット名 テストケース
all 00_mini_01.txt, 00_mini_02.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_rnd_11_01.txt, 01_rnd_11_02.txt, 01_rnd_11_03.txt, 01_rnd_11_04.txt, 01_rnd_11_05.txt, 01_rnd_11_06.txt, 01_rnd_11_07.txt, 01_rnd_11_08.txt, 01_rnd_11_09.txt, 01_rnd_11_10.txt, 01_rnd_11_11.txt, 01_rnd_11_12.txt, 01_rnd_11_13.txt, 01_rnd_11_14.txt, 01_rnd_11_15.txt, 01_rnd_11_16.txt, 01_rnd_11_17.txt, 01_rnd_11_18.txt, 01_rnd_11_19.txt, 01_rnd_11_20.txt, 01_rnd_11_21.txt, 01_rnd_11_22.txt, 01_rnd_7_01.txt, 01_rnd_7_02.txt, 01_rnd_7_03.txt, 01_rnd_7_04.txt, 01_rnd_7_05.txt, 01_rnd_7_06.txt, 01_rnd_7_07.txt, 01_rnd_7_08.txt, 01_rnd_7_09.txt, 01_rnd_7_10.txt, 01_rnd_7_11.txt, 01_rnd_7_12.txt, 01_rnd_7_13.txt, 01_rnd_7_14.txt, 01_rnd_7_15.txt, 01_rnd_7_16.txt, 01_rnd_7_17.txt, 01_rnd_7_18.txt, 01_rnd_7_19.txt, 01_rnd_7_20.txt, 01_rnd_7_21.txt, 01_rnd_7_22.txt, 01_rnd_8_01.txt, 01_rnd_8_02.txt, 01_rnd_8_03.txt, 01_rnd_8_04.txt, 01_rnd_8_05.txt, 01_rnd_8_06.txt, 01_rnd_8_07.txt, 01_rnd_8_08.txt, 01_rnd_8_09.txt, 01_rnd_8_10.txt, 01_rnd_8_11.txt, 01_rnd_8_12.txt, 01_rnd_8_13.txt, 01_rnd_8_14.txt, 01_rnd_8_15.txt, 01_rnd_8_16.txt, 01_rnd_8_17.txt, 01_rnd_8_18.txt, 01_rnd_8_19.txt, 01_rnd_8_20.txt, 01_rnd_8_21.txt, 01_rnd_8_22.txt
ケース名 結果 実行時間 メモリ
00_mini_01.txt AC 3009 ms 2080 KiB
00_mini_02.txt AC 3003 ms 2148 KiB
00_sample_01.txt AC 3003 ms 1968 KiB
00_sample_02.txt AC 3003 ms 1936 KiB
00_sample_03.txt AC 3007 ms 1960 KiB
01_rnd_11_01.txt AC 3003 ms 2076 KiB
01_rnd_11_02.txt AC 3003 ms 2024 KiB
01_rnd_11_03.txt AC 3003 ms 2052 KiB
01_rnd_11_04.txt AC 3003 ms 1988 KiB
01_rnd_11_05.txt AC 3003 ms 2072 KiB
01_rnd_11_06.txt AC 3003 ms 2136 KiB
01_rnd_11_07.txt AC 3003 ms 2032 KiB
01_rnd_11_08.txt AC 3003 ms 2048 KiB
01_rnd_11_09.txt AC 3003 ms 2132 KiB
01_rnd_11_10.txt AC 3003 ms 2044 KiB
01_rnd_11_11.txt AC 3004 ms 2080 KiB
01_rnd_11_12.txt AC 3003 ms 2044 KiB
01_rnd_11_13.txt AC 3003 ms 1936 KiB
01_rnd_11_14.txt AC 3003 ms 2124 KiB
01_rnd_11_15.txt AC 3003 ms 2080 KiB
01_rnd_11_16.txt AC 3003 ms 2060 KiB
01_rnd_11_17.txt AC 3003 ms 2108 KiB
01_rnd_11_18.txt AC 3003 ms 1976 KiB
01_rnd_11_19.txt AC 3003 ms 2072 KiB
01_rnd_11_20.txt AC 3003 ms 2072 KiB
01_rnd_11_21.txt AC 3003 ms 2084 KiB
01_rnd_11_22.txt AC 3003 ms 1972 KiB
01_rnd_7_01.txt AC 3003 ms 2064 KiB
01_rnd_7_02.txt AC 3004 ms 2060 KiB
01_rnd_7_03.txt AC 3003 ms 1940 KiB
01_rnd_7_04.txt AC 3003 ms 2084 KiB
01_rnd_7_05.txt AC 3004 ms 2060 KiB
01_rnd_7_06.txt AC 3003 ms 2032 KiB
01_rnd_7_07.txt AC 3004 ms 2124 KiB
01_rnd_7_08.txt AC 3003 ms 2092 KiB
01_rnd_7_09.txt AC 3003 ms 2064 KiB
01_rnd_7_10.txt AC 3004 ms 2132 KiB
01_rnd_7_11.txt AC 3003 ms 2076 KiB
01_rnd_7_12.txt AC 3003 ms 2120 KiB
01_rnd_7_13.txt AC 3003 ms 2168 KiB
01_rnd_7_14.txt AC 3003 ms 2092 KiB
01_rnd_7_15.txt AC 3003 ms 2112 KiB
01_rnd_7_16.txt AC 3004 ms 2132 KiB
01_rnd_7_17.txt AC 3003 ms 2088 KiB
01_rnd_7_18.txt AC 3003 ms 2104 KiB
01_rnd_7_19.txt AC 3003 ms 2076 KiB
01_rnd_7_20.txt AC 3003 ms 2080 KiB
01_rnd_7_21.txt AC 3003 ms 2060 KiB
01_rnd_7_22.txt AC 3003 ms 1976 KiB
01_rnd_8_01.txt AC 3003 ms 2080 KiB
01_rnd_8_02.txt AC 3003 ms 2120 KiB
01_rnd_8_03.txt AC 3003 ms 2104 KiB
01_rnd_8_04.txt AC 3003 ms 2068 KiB
01_rnd_8_05.txt AC 3003 ms 2084 KiB
01_rnd_8_06.txt AC 3003 ms 1884 KiB
01_rnd_8_07.txt AC 3003 ms 2044 KiB
01_rnd_8_08.txt AC 3003 ms 2060 KiB
01_rnd_8_09.txt AC 3003 ms 2060 KiB
01_rnd_8_10.txt AC 3003 ms 2064 KiB
01_rnd_8_11.txt AC 3003 ms 2072 KiB
01_rnd_8_12.txt AC 3003 ms 2064 KiB
01_rnd_8_13.txt AC 3003 ms 2040 KiB
01_rnd_8_14.txt AC 3003 ms 2032 KiB
01_rnd_8_15.txt AC 3003 ms 2056 KiB
01_rnd_8_16.txt AC 3003 ms 2120 KiB
01_rnd_8_17.txt AC 3003 ms 2048 KiB
01_rnd_8_18.txt AC 3003 ms 2140 KiB
01_rnd_8_19.txt AC 3003 ms 2080 KiB
01_rnd_8_20.txt AC 3003 ms 1972 KiB
01_rnd_8_21.txt AC 3003 ms 2036 KiB
01_rnd_8_22.txt AC 3003 ms 2120 KiB