結果
問題 | No.2918 Divide Applicants Fairly |
ユーザー |
|
提出日時 | 2024-10-08 10:35:55 |
言語 | Rust (1.83.0 + proconio) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,811 bytes |
コンパイル時間 | 12,235 ms |
コンパイル使用メモリ | 402,236 KB |
実行使用メモリ | 52,080 KB |
最終ジャッジ日時 | 2024-10-08 10:36:40 |
合計ジャッジ時間 | 32,618 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
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};//#[allow(unused_imports)]//use rand::{Rng, thread_rng, seq::{SliceRandom, IndexedRandom}};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 cnt = 0;for i in 0..n{if r[i] == 0{cnt += 1;}}if cnt>=2{println!("0"); return;}let d = 3_200_000;let mut flag = vec![0; 6_400_001];if r[0]!=0{flag[d+r[0]] = 1;}for i in 1..n{if r[i]==0{continue}let mut nf = flag.clone();nf[d+r[i]] = 1;for j in 0..=2*d{if flag[j] > 0{if r[i]+j <= 2*d{nf[j+r[i]] |= flag[j] | 1;}if j >= r[i]{nf[j-r[i]] = flag[j] | 2;}}}flag = nf;}for i in 0..=d{if (cnt > 0 && (flag[d+i]>0||flag[d-i]>0))||(flag[d+i]==3||flag[d-i]==3){println!("{}", i);return;}}}