結果
問題 | No.472 平均順位 |
ユーザー |
![]() |
提出日時 | 2023-04-06 00:37:37 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 430 ms / 2,000 ms |
コード長 | 2,226 bytes |
コンパイル時間 | 14,985 ms |
コンパイル使用メモリ | 401,484 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-02 03:29:31 |
合計ジャッジ時間 | 14,798 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 16 |
ソースコード
use std::{convert::TryFrom,io::{stdin, BufRead},iter::once,u64::MAX,};use crate::cmpmore::CmpMore;fn main() {let stdin = stdin();let mut stdin = stdin.lock().lines().map(Result::unwrap);let [n, p] = <[_; 2]>::try_from(stdin.next().unwrap().split_whitespace().map(|x| x.parse::<usize>().unwrap()).collect::<Vec<_>>().as_slice(),).unwrap();let mut dp = vec![MAX; p + 1];dp[0] = 0;for _ in 0..n {let a = <[_; 4]>::try_from(stdin.next().unwrap().split_whitespace().map(|x| x.parse::<u64>().unwrap()).chain(once(1)).collect::<Vec<_>>().as_slice(),).unwrap();let mut swp = vec![MAX; p + 1];for i in (0..=p).rev() {for (w, &v) in a.iter().enumerate() {if i + w <= p {swp[i + w].change_min(dp[i].saturating_add(v));}}}dp = swp;}let ans = dp[p] as f64 / n as f64;println!("{}", ans);}// cmpmore {{{#[allow(dead_code)]mod cmpmore {pub fn change_min<T: PartialOrd>(lhs: &mut T, rhs: T) {if *lhs > rhs {*lhs = rhs;}}pub fn change_max<T: PartialOrd>(lhs: &mut T, rhs: T) {if *lhs < rhs {*lhs = rhs;}}#[macro_export]macro_rules! change_min {($lhs:expr, $rhs:expr) => {let rhs = $rhs;let lhs = $lhs;$crate::cmpmore::change_min(lhs, rhs);};}#[macro_export]macro_rules! change_max {($lhs:expr, $rhs:expr) => {let rhs = $rhs;let lhs = $lhs;$crate::cmpmore::change_max(lhs, rhs);};}pub trait CmpMore: PartialOrd + Sized {fn change_min(&mut self, rhs: Self) {change_min(self, rhs)}fn change_max(&mut self, rhs: Self) {change_max(self, rhs)}}impl<T: PartialOrd + Sized> CmpMore for T {}}// }}}