Cod sursa(job #3302767)

Utilizator TarceaIonutTarcea Tudor Ionut TarceaIonut Data 10 iulie 2025 22:13:18
Problema Transport Scor 100
Compilator rs Status done
Runda Arhiva de probleme Marime 1.48 kb
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();
}