Cod sursa(job #2426920)

Utilizator krityxAdrian Buzea krityx Data 30 mai 2019 00:46:37
Problema Cutii Scor 0
Compilator rs Status done
Runda Arhiva de probleme Marime 2 kb
use std::fs::File;
use std::io::{Write, BufWriter, BufRead, BufReader};
use std::cmp::Ordering;

fn read_line<T: BufRead>(input: &mut T) -> String {
    let mut line = String::new();
    input.read_line(&mut line).expect("Something");
    line.trim().to_string()
}

fn fits_in(box1: &Vec<usize>, box2: &Vec<usize>) -> bool {
    for i in 0..3 {
        if box2[i] >= box1[i] {
            return false;
        }
    }

    return true;
}

fn compare_boxes(box1: &Vec<usize>, box2: &Vec<usize>) -> Ordering {
    return match box1[0].cmp(&box2[0]) {
        Ordering::Greater => Ordering::Less,
        Ordering::Less => Ordering::Greater,
        Ordering::Equal => match box1[1].cmp(&box2[1]) {
            Ordering:: Greater => Ordering::Less,
            Ordering::Less => Ordering::Greater,
            Ordering::Equal => Ordering::Equal
        }
    }
}

fn solve(cutii: &mut Vec<Vec<usize>>) -> usize {
    cutii.sort_by(compare_boxes);
    let mut d = vec![1; cutii.len()];

    for i in 1..cutii.len() {
        let mut max = 0;
        for j in 0..i {
            if fits_in(&cutii[j], &cutii[i]) && d[j] > max {
                max = d[j];
            }
        }
        d[i] = max + 1;
    }

    let m: &usize = d.iter().max().unwrap();
    *m
}


fn main() {
    let input_file = File::open("cutii.in").expect("cutii.in");
    let output = File::create("cutii.out").expect("cutii.out");
    let mut reader = BufReader::new(input_file);
    let mut writer = BufWriter::new(&output);

    let line = read_line(&mut reader);
    let pair: Vec<usize> = line.split(' ').map(|s| s.trim().parse().expect("An int")).collect();
    let n = pair[0];
    let t = pair[1];

    for _i in 1..=t {
        let mut cutii = Vec::new();
        for _j in 0..n {
            let line = read_line(&mut reader);
            let cutie: Vec<usize> = line.split(' ').map(|s| s.trim().parse().expect("An int")).collect();
            cutii.push(cutie);
        }

        writeln!(writer, "{}", solve(&mut cutii)).expect("Something written");
    }

    ()
}