結果
| 問題 |
No.527 ナップサック容量問題
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-08-22 00:33:52 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,280 bytes |
| コンパイル時間 | 20,124 ms |
| コンパイル使用メモリ | 380,572 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-15 00:56:24 |
| 合計ジャッジ時間 | 20,626 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 35 WA * 2 |
ソースコード
#![allow(unused_macros, unused_imports, dead_code)]
use std::io::*;
use std::collections::*;
fn read_line() -> String {
let mut s = String::new();
stdin().read_line(&mut s).unwrap();
s
}
macro_rules! from_iter {
($($a:ident),+ = $it:expr) => {
$(let $a;)+
{
let mut _it = $it.into_iter();
$($a = _it.next().unwrap();)+
assert!(_it.next().is_none());
}
};
}
macro_rules! from_str {
($($a:ident : $t:ty),+ = $s:expr) => {
$(let $a: $t;)+
{
let mut _it = $s.split_whitespace();
$($a = _it.next().unwrap().parse().unwrap();)+
assert!(_it.next().is_none());
}
};
}
macro_rules! from_line {
($($a:ident : $t:ty),+) => {
$(let $a: $t;)+
{
let _line = read_line();
let mut _it = _line.trim().split_whitespace();
$($a = _it.next().unwrap().parse().unwrap();)+
assert!(_it.next().is_none());
}
};
}
macro_rules! print_var_fmt {
($e:expr) => {
concat!(stringify!($e), ":\t{}")
};
($e:expr, $($es: expr),+) => {
concat!(print_var_fmt!($e), ",\t", print_var_fmt!($($es),+))
};
}
macro_rules! dbg {
($($es:expr),+) => {
writeln!(&mut io::stderr(), print_var_fmt!($($es),*), $($es),*);
};
}
fn main() {
from_line!(n: u32);
let mut arr = vec![0; 100002];
for _ in 0..n {
from_line!(v: u32, w: u32);
for i in (1..(100002-w as usize)).rev() {
if arr[i] > 0 && arr[i] + v > arr[i+w as usize] {
arr[i+w as usize] = arr[i] + v;
}
}
if arr[w as usize] <= v { arr[w as usize] = v; }
}
from_line!(v: u32);
let mut min = 0;
for (i,x) in arr.iter().enumerate() {
if *x == v {
min = i;
break;
}
}
let mut max = min;
for (i, x) in arr.iter().enumerate().skip(min + 1) {
if *x <= v {
max = i;
}
else {
break;
}
}
if min == 0 {
println!("1");
} else {
println!("{}", min);
}
if min == max || max > 100000 {
println!("inf");
} else {
println!("{}", max);
}
}