Pagini recente » Cod sursa (job #1343789) | Cod sursa (job #1342393) | Cod sursa (job #3249660) | Cod sursa (job #3193871) | Cod sursa (job #2426919)
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");
}
}