Submission #1750001
Source Code Expand
#[allow(unused_imports)]
use std::cmp::{max, min, Ordering};
#[allow(unused_imports)]
use std::collections::{HashMap, HashSet, BinaryHeap, VecDeque};
#[allow(unused_imports)]
use std::iter::FromIterator;
mod util {
use std::io::stdin;
use std::str::FromStr;
use std::fmt::Debug;
#[allow(dead_code)]
pub fn line() -> String {
let mut line: String = String::new();
stdin().read_line(&mut line).unwrap();
line.trim().to_string()
}
#[allow(dead_code)]
pub fn get<T: FromStr>() -> T
where
<T as FromStr>::Err: Debug,
{
let mut line: String = String::new();
stdin().read_line(&mut line).unwrap();
line.trim().parse().unwrap()
}
#[allow(dead_code)]
pub fn gets<T: FromStr>() -> Vec<T>
where
<T as FromStr>::Err: Debug,
{
let mut line: String = String::new();
stdin().read_line(&mut line).unwrap();
line.split_whitespace()
.map(|t| t.parse().unwrap())
.collect()
}
#[allow(dead_code)]
pub fn get2<T: FromStr, U: FromStr>() -> (T, U)
where
<T as FromStr>::Err: Debug,
<U as FromStr>::Err: Debug,
{
let mut line: String = String::new();
stdin().read_line(&mut line).unwrap();
let mut iter = line.split_whitespace();
(
iter.next().unwrap().parse().unwrap(),
iter.next().unwrap().parse().unwrap(),
)
}
#[allow(dead_code)]
pub fn get3<S: FromStr, T: FromStr, U: FromStr>() -> (S, T, U)
where
<S as FromStr>::Err: Debug,
<T as FromStr>::Err: Debug,
<U as FromStr>::Err: Debug,
{
let mut line: String = String::new();
stdin().read_line(&mut line).unwrap();
let mut iter = line.split_whitespace();
(
iter.next().unwrap().parse().unwrap(),
iter.next().unwrap().parse().unwrap(),
iter.next().unwrap().parse().unwrap(),
)
}
}
#[allow(unused_macros)]
macro_rules! debug {
($($a:expr),*) => {
println!(concat!($(stringify!($a), " = {:?}, "),*), $($a),*);
}
}
fn main() {
let (w, h): (usize, usize) = util::get2();
let p: Vec<usize> = (0..w).map(|_| util::get()).collect();
let q: Vec<usize> = (0..h).map(|_| util::get()).collect();
let mut v: Vec<(usize, bool)> = p.iter()
.map(|&c| (c, true))
.chain(q.iter().map(|&c| (c, false)))
.collect();
v.sort();
let m = (w + 1) * (h + 1) - 1;
let mut used = 0;
let mut wc = 0;
let mut hc = 0;
let mut ans = 0;
for &(c, t) in &v {
if t {
let u = min(h + 1 - hc, m - used);
wc += 1;
ans += u * c;
used += u;
} else {
let u = min(w + 1 - wc, m - used);
hc += 1;
ans += u * c;
used += u;
}
// debug!(used, wc, hc, ans);
if used == m {
break;
}
}
println!("{}", ans);
}
Submission Info
Submission Time |
|
Task |
C - Gr-idian MST |
User |
hatoo |
Language |
Rust (1.15.1) |
Score |
500 |
Code Size |
3160 Byte |
Status |
AC |
Exec Time |
52 ms |
Memory |
12540 KB |
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
500 / 500 |
Status |
|
|
Set Name |
Test Cases |
Sample |
s1.txt, s2.txt |
All |
01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, s1.txt, s2.txt |
Case Name |
Status |
Exec Time |
Memory |
01.txt |
AC |
51 ms |
12540 KB |
02.txt |
AC |
52 ms |
12540 KB |
03.txt |
AC |
51 ms |
12540 KB |
04.txt |
AC |
52 ms |
12540 KB |
05.txt |
AC |
51 ms |
12540 KB |
06.txt |
AC |
51 ms |
12540 KB |
07.txt |
AC |
51 ms |
12540 KB |
08.txt |
AC |
52 ms |
12540 KB |
09.txt |
AC |
51 ms |
12540 KB |
10.txt |
AC |
51 ms |
12540 KB |
11.txt |
AC |
41 ms |
12540 KB |
12.txt |
AC |
41 ms |
12540 KB |
13.txt |
AC |
32 ms |
12540 KB |
14.txt |
AC |
50 ms |
12540 KB |
15.txt |
AC |
50 ms |
12540 KB |
16.txt |
AC |
26 ms |
8444 KB |
17.txt |
AC |
26 ms |
8444 KB |
18.txt |
AC |
26 ms |
8444 KB |
19.txt |
AC |
26 ms |
8444 KB |
20.txt |
AC |
29 ms |
12540 KB |
21.txt |
AC |
39 ms |
12540 KB |
22.txt |
AC |
39 ms |
12540 KB |
23.txt |
AC |
28 ms |
12540 KB |
24.txt |
AC |
31 ms |
12540 KB |
25.txt |
AC |
2 ms |
4352 KB |
26.txt |
AC |
2 ms |
4352 KB |
27.txt |
AC |
2 ms |
4352 KB |
28.txt |
AC |
2 ms |
4352 KB |
s1.txt |
AC |
2 ms |
4352 KB |
s2.txt |
AC |
2 ms |
4352 KB |