結果
問題 | No.2918 Divide Applicants Fairly |
ユーザー |
|
提出日時 | 2024-10-08 09:55:37 |
言語 | Rust (1.83.0 + proconio) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,746 bytes |
コンパイル時間 | 13,448 ms |
コンパイル使用メモリ | 385,364 KB |
実行使用メモリ | 52,016 KB |
最終ジャッジ日時 | 2024-10-08 09:56:21 |
合計ジャッジ時間 | 42,345 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 42 WA * 19 |
ソースコード
#[allow(unused_imports)]use std::{collections::{HashSet, HashMap, BinaryHeap, VecDeque, BTreeSet, BTreeMap},mem::{swap},cmp::{Reverse, Ordering, PartialOrd, PartialEq},fmt::{Debug},time::Instant};use std::io::{Read, BufReader, stdin};struct InputReader<R: Read> {bytes: std::iter::Peekable<std::io::Bytes<BufReader<R>>>,}impl<R: Read> InputReader<R> {fn new(reader: R) -> Self {let reader = BufReader::new(reader);let bytes = reader.bytes().peekable();Self { bytes }}fn next_token(&mut self) -> String {self.bytes.by_ref().map(|r| r.unwrap() as char).take_while(|c| !c.is_whitespace()).collect()}}macro_rules! input {($reader:expr, $($r:tt)*) => {let mut next = || $reader.next_token();input_inner!{next, $($r)*}};}macro_rules! input_inner {($next:expr) => {};($next:expr, ) => {};($next:expr, $var:ident : $t:tt $($r:tt)*) => {let $var = read_value!($next, $t);input_inner!{$next $($r)*}};}macro_rules! read_value {($next:expr, ( $($t:tt),* )) => {( $(read_value!($next, $t)),* )};($next:expr, [ $t:tt ; $len:expr ]) => {(0..$len).map(|_| read_value!($next, $t)).collect::<Vec<_>>()};($next:expr, chars) => {read_value!($next, String).chars().collect::<Vec<char>>()};($next:expr, usize1) => {read_value!($next, usize) - 1};($next:expr, usize) => {$next().parse::<usize>().expect("Parse error")};($next:expr, $t:ty) => {$next().parse::<$t>().expect("Parse error")};}fn main() {let stdin = stdin();let mut reader = InputReader::new(stdin.lock());input!{reader,n: usize,r: [usize; n],}let mut ans = 1usize<<60;let d = 3_200_000;let mut flag = vec![0; 6_400_001];flag[d] = 1;for i in 0..n{let mut n_flag = vec![0; 6_400_001];for j in 0..=2*d{n_flag[j] |= flag[j];if r[i] == 0{if n_flag[j] > 0{n_flag[j] |= 2;}} else if flag[j] > 0{if j >= r[i]{n_flag[j-r[i]] |= flag[j] | 2;}if j+r[i] <= 2*d{n_flag[j+r[i]] |= flag[j] | 4;}}}flag = n_flag}for i in 0..=d{if flag[i] & 6 == 6{ans = d-i;}}for i in d..=2*d{if flag[i] & 6 == 6{ans = ans.min(i-d);}}println!("{}", ans);}