Pagini recente » Cod sursa (job #1648315) | Istoria paginii runda/ojui2018ad/clasament | Cod sursa (job #2117225) | Cod sursa (job #1883307) | Cod sursa (job #3302767)
struct Data {
n:usize,
k:usize,
vec: Vec<i32>
}
fn read_data() -> Data {
let file_content_str = std::fs::read_to_string("transport.in").unwrap();
let file_content = file_content_str.split_whitespace().collect::<Vec<&str>>();
let n:usize = file_content[0].parse::<usize>().unwrap();
let k:usize = file_content[1].parse::<usize>().unwrap();
let mut vec:Vec<i32> = vec![0; n];
{
let mut nr:usize = 2;
for i in 0..n{
vec[i] = file_content[nr].parse::<i32>().unwrap();
nr += 1;
}
}
Data { n, k, vec }
}
fn check_if_possible(data:&Data, volume:i32) -> bool{
let mut sum = 0;
let mut nr_tr = 1;
for i in 0..data.n {
if data.vec[i] > volume {
return false;
}
if sum + data.vec[i] <= volume{
sum += data.vec[i];
}
else{
nr_tr += 1;
if nr_tr > data.k {
return false;
}
sum = data.vec[i];
}
}
true
}
fn solve(data: Data) -> i32{
let mut v1:i32 = 1;
let mut v2:i32 = 1e9 as i32;
let mut ans:i32 = -1;
let mut m;
while v1 <= v2 {
m = (v1 + v2) / 2;
if check_if_possible(&data, m) == true{
ans = m;
v2 = m - 1;
}
else{
v1 = m + 1;
}
}
ans
}
fn main() {
let input: Data = read_data();
std::fs::write("transport.out", format!("{}", solve(input))).unwrap();
}