update many

This commit is contained in:
2026-04-09 23:56:06 +09:00
parent ac9a4eb888
commit 28edf84238
11 changed files with 861 additions and 0 deletions

75
storage/zeta/rs/20439.rs Normal file
View 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, &times_task_to_add, 0) {
println!("GOOD");
} else {
println!("BAD");
}
}