提出 #49628945
ソースコード 拡げる
use std::collections::{BTreeSet, HashSet, VecDeque};
use proconio::input;
fn main() {
input! {
n: usize,
}
let mut t = vec![];
for _ in 0..n {
input! {
k_i: usize,
t_i: [usize; k_i],
}
t.push(t_i);
}
input! {
m: usize,
a: [usize; m],
}
let mut max1 = BTreeSet::new();
let mut max2 = BTreeSet::new();
for i in 0..n {
max1.insert((t[i][0], i, 0));
if 1 < t[i].len() {
max2.insert((t[i][1], i, 1));
}
}
let mut used = HashSet::new();
for a_i in a {
match a_i {
1 => {
let (x, j, k) = max1.pop_last().unwrap();
used.insert((x, j, k));
let mut next = VecDeque::new();
for l in k + 1..t[j].len() {
if next.len() == 2 {
break;
}
if used.contains(&(t[j][l], j, l)) {
continue;
}
next.push_back((t[j][l], j, l));
}
if let Some(v) = next.pop_front() {
max1.insert(v);
max2.remove(&v);
}
if let Some(v) = next.pop_front() {
max2.insert(v);
}
println!("{}", x);
}
2 => match (max1.pop_last(), max2.pop_last()) {
(None, None) | (None, Some(_)) => unreachable!(),
(Some((x, j, k)), None) => {
used.insert((x, j, k));
let mut next = VecDeque::new();
for l in k + 1..t[j].len() {
if next.len() == 2 {
break;
}
if used.contains(&(t[j][l], j, l)) {
continue;
}
next.push_back((t[j][l], j, l));
}
if let Some(v) = next.pop_front() {
max1.insert(v);
max2.remove(&v);
}
if let Some(v) = next.pop_front() {
max2.insert(v);
}
println!("{}", x);
}
(Some((x1, j1, k1)), Some((x2, j2, k2))) => {
if x1 > x2 {
max2.insert((x2, j2, k2));
let (x, j, k) = (x1, j1, k1);
used.insert((x, j, k));
let mut next = VecDeque::new();
for l in k + 1..t[j].len() {
if next.len() == 2 {
break;
}
if used.contains(&(t[j][l], j, l)) {
continue;
}
next.push_back((t[j][l], j, l));
}
if let Some(v) = next.pop_front() {
max1.insert(v);
max2.remove(&v);
}
if let Some(v) = next.pop_front() {
max2.insert(v);
}
println!("{}", x);
} else {
max1.insert((x1, j1, k1));
let (x, j, k) = (x2, j2, k2);
used.insert((x, j, k));
let mut next = VecDeque::new();
for l in k + 1..t[j].len() {
if next.len() == 2 {
break;
}
if used.contains(&(t[j][l], j, l)) {
continue;
}
next.push_back((t[j][l], j, l));
}
if let Some(v) = next.pop_front() {
max2.insert(v);
}
println!("{}", x);
}
}
},
_ => unreachable!(),
}
}
}
提出情報
| 提出日時 |
|
| 問題 |
L - スーパーマーケット |
| ユーザ |
bouzuya |
| 言語 |
Rust (rustc 1.70.0) |
| 得点 |
6 |
| コード長 |
4334 Byte |
| 結果 |
AC |
| 実行時間 |
457 ms |
| メモリ |
40856 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
6 / 6 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample_01.txt, sample_02.txt |
| All |
max_01.txt, max_02.txt, max_03.txt, max_04.txt, max_05.txt, max_06.txt, max_07.txt, max_08.txt, max_09.txt, max_10.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, sample_01.txt, sample_02.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| max_01.txt |
AC |
454 ms |
40856 KiB |
| max_02.txt |
AC |
457 ms |
40836 KiB |
| max_03.txt |
AC |
371 ms |
30208 KiB |
| max_04.txt |
AC |
380 ms |
30116 KiB |
| max_05.txt |
AC |
380 ms |
30168 KiB |
| max_06.txt |
AC |
399 ms |
30192 KiB |
| max_07.txt |
AC |
400 ms |
30224 KiB |
| max_08.txt |
AC |
417 ms |
30900 KiB |
| max_09.txt |
AC |
424 ms |
31204 KiB |
| max_10.txt |
AC |
436 ms |
32532 KiB |
| random_01.txt |
AC |
94 ms |
9032 KiB |
| random_02.txt |
AC |
96 ms |
9772 KiB |
| random_03.txt |
AC |
70 ms |
14708 KiB |
| random_04.txt |
AC |
45 ms |
6680 KiB |
| random_05.txt |
AC |
20 ms |
8864 KiB |
| random_06.txt |
AC |
40 ms |
5304 KiB |
| sample_01.txt |
AC |
0 ms |
2092 KiB |
| sample_02.txt |
AC |
0 ms |
1824 KiB |