Submission #1818833


Source Code Expand

#[cfg(feature = "local")]
pub mod tests;

use std::io::*;
use std::str::FromStr;
use std::fmt::Debug;

pub fn main() {
    let i = stdin();
    solve(&mut i.lock(), &mut stdout());
}

pub fn solve(i: &mut BufRead, o: &mut Write) {
    let (n, m) = read_usizes(i);
    let mut buf = Vec::new();
    let mut g = make_graph(n, &mut buf);

    for _ in 0..m {
        let (x, y) = read_usizes(i);
        let (x, y) = (x - 1, y - 1);
        g[x][y - x - 1] = true;
    }

    // 派閥に所属する人物がmembersであるときに、[begin,end)から最大何人派閥に人物を追加できるかを返す
    fn get_addable(members: List<usize>, g: &[&mut [bool]], begin: usize, end: usize) -> usize {
        (begin..end)
            .map(|y| {
                if members.iter().cloned().all(|x| g[x][y - x - 1]) {
                    get_addable(members.cons(y), g, y + 1, end) + 1
                } else {
                    0
                }
            })
            .max()
            .unwrap_or(0)
    }
    let r = get_addable(List::new(), g.as_slice(), 0, n);
    writeln!(o, "{}", r).unwrap();
}
fn make_graph<'a>(nodes: usize, buf: &'a mut Vec<bool>) -> Vec<&'a mut [bool]> {
    buf.resize(nodes * (nodes - 1) / 2, false);
    let mut g = Vec::with_capacity(nodes);
    let mut s = buf.as_mut_slice();
    for n in 0..nodes {
        let s_old = s;
        let (mut head, mut tail) = s_old.split_at_mut(nodes - n - 1);
        s = tail;
        g.push(head);
    }
    assert!(s.len() == 0);
    g
}
enum List<'a, T: 'a> {
    None,
    Cons { head: T, tail: &'a List<'a, T> },
}
impl<'a, T: 'a> List<'a, T> {
    fn new() -> List<'static, T> {
        List::None
    }
    fn cons<'b>(&'b self, value: T) -> List<'b, T> {
        List::Cons {
            head: value,
            tail: self,
        }
    }
    fn iter(&self) -> &Self {
        self
    }
}
impl<'a, T: 'a> Iterator for &'a List<'a, T> {
    type Item = &'a T;

    fn next(&mut self) -> Option<&'a T> {
        match *self {
            &List::None => None,
            &List::Cons { ref head, tail } => {
                *self = tail;
                Some(head)
            }
        }
    }
}

fn read_usizes(i: &mut BufRead) -> (usize, usize) {
    let line = read_line(i);
    let mut s = line.trim().split(' ');
    let r0 = read(&mut s);
    let r1 = read(&mut s);
    (r0, r1)
}

fn read_line(i: &mut BufRead) -> String {
    let mut line = String::new();
    i.read_line(&mut line).unwrap();
    line
}

fn read<'a, 'b, I, T>(i: &'a mut I) -> T
where
    I: Iterator<Item = &'b str>,
    T: FromStr,
    <T as FromStr>::Err: Debug,
{
    i.next().unwrap().parse().unwrap()
}

Submission Info

Submission Time
Task D - 派閥
User frozenlib
Language Rust (1.15.1)
Score 100
Code Size 2779 Byte
Status AC
Exec Time 2 ms
Memory 4352 KB

Compile Error

warning: variable does not need to be mutable, #[warn(unused_mut)] on by default
  --> ./Main.rs:46:14
   |
46 |         let (mut head, mut tail) = s_old.split_at_mut(nodes - n - 1);
   |              ^^^^^^^^

Judge Result

Set Name all
Score / Max Score 100 / 100
Status
AC × 74
Set Name Test Cases
all 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt, test_60.txt, test_61.txt, test_62.txt, test_63.txt, test_64.txt, test_65.txt, test_66.txt, test_67.txt, test_68.txt, test_69.txt, test_70.txt
Case Name Status Exec Time Memory
00_sample_01.txt AC 2 ms 4352 KB
00_sample_02.txt AC 2 ms 4352 KB
00_sample_03.txt AC 2 ms 4352 KB
00_sample_04.txt AC 2 ms 4352 KB
test_01.txt AC 2 ms 4352 KB
test_02.txt AC 2 ms 4352 KB
test_03.txt AC 2 ms 4352 KB
test_04.txt AC 2 ms 4352 KB
test_05.txt AC 2 ms 4352 KB
test_06.txt AC 2 ms 4352 KB
test_07.txt AC 2 ms 4352 KB
test_08.txt AC 2 ms 4352 KB
test_09.txt AC 2 ms 4352 KB
test_10.txt AC 2 ms 4352 KB
test_11.txt AC 2 ms 4352 KB
test_12.txt AC 2 ms 4352 KB
test_13.txt AC 2 ms 4352 KB
test_14.txt AC 2 ms 4352 KB
test_15.txt AC 2 ms 4352 KB
test_16.txt AC 2 ms 4352 KB
test_17.txt AC 2 ms 4352 KB
test_18.txt AC 2 ms 4352 KB
test_19.txt AC 2 ms 4352 KB
test_20.txt AC 2 ms 4352 KB
test_21.txt AC 2 ms 4352 KB
test_22.txt AC 2 ms 4352 KB
test_23.txt AC 2 ms 4352 KB
test_24.txt AC 2 ms 4352 KB
test_25.txt AC 2 ms 4352 KB
test_26.txt AC 2 ms 4352 KB
test_27.txt AC 2 ms 4352 KB
test_28.txt AC 2 ms 4352 KB
test_29.txt AC 2 ms 4352 KB
test_30.txt AC 2 ms 4352 KB
test_31.txt AC 2 ms 4352 KB
test_32.txt AC 2 ms 4352 KB
test_33.txt AC 2 ms 4352 KB
test_34.txt AC 2 ms 4352 KB
test_35.txt AC 2 ms 4352 KB
test_36.txt AC 2 ms 4352 KB
test_37.txt AC 2 ms 4352 KB
test_38.txt AC 2 ms 4352 KB
test_39.txt AC 2 ms 4352 KB
test_40.txt AC 2 ms 4352 KB
test_41.txt AC 2 ms 4352 KB
test_42.txt AC 2 ms 4352 KB
test_43.txt AC 2 ms 4352 KB
test_44.txt AC 2 ms 4352 KB
test_45.txt AC 2 ms 4352 KB
test_46.txt AC 2 ms 4352 KB
test_47.txt AC 2 ms 4352 KB
test_48.txt AC 2 ms 4352 KB
test_49.txt AC 2 ms 4352 KB
test_50.txt AC 2 ms 4352 KB
test_51.txt AC 2 ms 4352 KB
test_52.txt AC 2 ms 4352 KB
test_53.txt AC 2 ms 4352 KB
test_54.txt AC 2 ms 4352 KB
test_55.txt AC 2 ms 4352 KB
test_56.txt AC 2 ms 4352 KB
test_57.txt AC 2 ms 4352 KB
test_58.txt AC 2 ms 4352 KB
test_59.txt AC 2 ms 4352 KB
test_60.txt AC 2 ms 4352 KB
test_61.txt AC 2 ms 4352 KB
test_62.txt AC 2 ms 4352 KB
test_63.txt AC 2 ms 4352 KB
test_64.txt AC 2 ms 4352 KB
test_65.txt AC 2 ms 4352 KB
test_66.txt AC 2 ms 4352 KB
test_67.txt AC 2 ms 4352 KB
test_68.txt AC 2 ms 4352 KB
test_69.txt AC 2 ms 4352 KB
test_70.txt AC 2 ms 4352 KB