結果

問題 No.3068 Speedrun (Hard)
ユーザー atcoder8
提出日時 2025-03-21 23:12:01
言語 Rust
(1.83.0 + proconio)
結果
WA  
実行時間 -
コード長 1,759 bytes
コンパイル時間 14,747 ms
コンパイル使用メモリ 398,948 KB
実行使用メモリ 7,328 KB
最終ジャッジ日時 2025-03-21 23:12:24
合計ジャッジ時間 21,704 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 22 WA * 7 RE * 3
権限があれば一括ダウンロードができます

ソースコード

diff #

use proconio::input;

fn main() {
    let (x0, x1, x2, x3) = solve().unwrap();
    println!("{} {} {} {}", x0, x1, x2, x3);
}

fn solve() -> Option<(usize, usize, usize, usize)> {
    input! {
        num_problems: [usize; 4],
        n: usize,
        times: [usize; 4],
        t: usize,
    }

    let solve = |x0: usize, x1: usize| -> Option<(usize, usize)> {
        if x0 > num_problems[0] || x1 > num_problems[1] || x0 + x1 > n {
            return None;
        }

        let time0 = x0 * times[0];
        let time1 = x1 * times[1];

        if time0 + time1 > t {
            return None;
        }

        let a = times[2] as i64;
        let b = times[3] as i64;
        let c = (t - (time0 + time1)) as i64;
        let d = (n - (x0 + x1)) as i64;

        if a == b {
            return if d % 2 == 0 && 2 * c == (a + b) * d {
                let x2 = d as usize / 2;
                Some((x2, x2))
            } else {
                None
            };
        }

        let numer2 = c - b * d;
        let denom2 = a - b;

        if numer2 % denom2 != 0 {
            return None;
        }

        let x2 = numer2 / denom2;

        if x2 < 0 || x2 as usize > num_problems[2] {
            return None;
        }

        let numer3 = c - a * d;
        let denom3 = b - a;

        if numer3 % denom3 != 0 {
            return None;
        }

        let x3 = numer3 / denom3;

        if x3 < 0 || x3 as usize > num_problems[3] {
            return None;
        }

        Some((x2 as usize, x3 as usize))
    };

    for x0 in 0..=num_problems[0] {
        for x1 in 0..=num_problems[1] {
            if let Some((x2, x3)) = solve(x0, x1) {
                return Some((x0, x1, x2, x3));
            }
        }
    }

    None
}
0