update many
This commit is contained in:
75
storage/zeta/rs/20439.rs
Normal file
75
storage/zeta/rs/20439.rs
Normal file
@@ -0,0 +1,75 @@
|
||||
use std::io::{read_to_string, stdin};
|
||||
|
||||
const DAY_START: usize = 0;
|
||||
const DAY_END: usize = 1440;
|
||||
|
||||
fn virtual_allocation(spaces: &mut Vec<usize>, tasks: &Vec<usize>, task_idx: usize) -> bool {
|
||||
if task_idx == tasks.len() {
|
||||
return true;
|
||||
}
|
||||
|
||||
let task_time = tasks[task_idx];
|
||||
|
||||
for i in 0..spaces.len() {
|
||||
if spaces[i] >= task_time {
|
||||
spaces[i] -= task_time;
|
||||
if virtual_allocation(spaces, tasks, task_idx + 1) {
|
||||
return true;
|
||||
}
|
||||
spaces[i] += task_time;
|
||||
}
|
||||
}
|
||||
|
||||
false
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut temp = read_to_string(stdin()).unwrap();
|
||||
|
||||
let mut iter = temp.split_whitespace().map(|x| x.parse::<usize>().unwrap());
|
||||
|
||||
let n = iter.next().unwrap();
|
||||
let k = iter.next().unwrap();
|
||||
|
||||
let mut pre_tasks = (0..n)
|
||||
.map(|_| (iter.next().unwrap(), iter.next().unwrap()))
|
||||
.collect::<Vec<(usize, usize)>>();
|
||||
|
||||
pre_tasks.sort_by_key(|&(start, _)| start);
|
||||
|
||||
let mut times_task_to_add = (0..k).map(|_| iter.next().unwrap()).collect::<Vec<usize>>();
|
||||
|
||||
let mut occupied_time = [false; DAY_END - DAY_START];
|
||||
|
||||
for (start, end) in pre_tasks {
|
||||
for time in start..end {
|
||||
occupied_time[time] = true;
|
||||
}
|
||||
}
|
||||
|
||||
let mut empty_space = vec![];
|
||||
|
||||
let mut cumulative = 0;
|
||||
for time in DAY_START..DAY_END {
|
||||
if !occupied_time[time] {
|
||||
cumulative += 1;
|
||||
} else {
|
||||
if cumulative > 0 {
|
||||
empty_space.push(cumulative);
|
||||
}
|
||||
cumulative = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if cumulative > 0 {
|
||||
empty_space.push(cumulative);
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
if virtual_allocation(&mut empty_space, ×_task_to_add, 0) {
|
||||
println!("GOOD");
|
||||
} else {
|
||||
println!("BAD");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user