| Task: | Tulostaulu |
| Sender: | EmuBird |
| Submission time: | 2025-01-18 14:01:02 +0200 |
| Language: | Rust (2021) |
| Status: | READY |
| Result: | 100 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 20 |
| #2 | ACCEPTED | 20 |
| #3 | ACCEPTED | 60 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | 1, 3 | details |
| #2 | ACCEPTED | 0.00 s | 2, 3 | details |
| #3 | ACCEPTED | 0.00 s | 3 | details |
| #4 | ACCEPTED | 0.00 s | 1, 2, 3 | details |
| #5 | ACCEPTED | 0.00 s | 3 | details |
| #6 | ACCEPTED | 0.00 s | 3 | details |
Code
use std::{collections::HashMap, io::{stdin, Stdin}};
fn read_line(stdin: &mut Stdin) -> String {
let mut s = String::new();
stdin.read_line(&mut s).unwrap();
s = s.trim().to_owned();
return s
}
fn main() {
let mut stdin = stdin();
let (contestant_count, attempt_count, task_count) = {
let line = read_line(&mut stdin);
let mut iter = line.split_whitespace().map(|x| x.parse::<u32>().unwrap());
(iter.next().unwrap(), iter.next().unwrap(), iter.next().unwrap())
};
let mut player_data = HashMap::new();
for _ in 0..contestant_count {
let line = read_line(&mut stdin);
player_data.insert(line, vec![(0_u32, 0_u32); task_count as usize]);
}
for i in 0..attempt_count {
let line = read_line(&mut stdin);
let mut iter = line.split_whitespace();
let contestant = iter.next().unwrap();
let task = get_task_index(iter.next().unwrap());
let points: u32 = iter.next().unwrap().parse().unwrap();
let data = player_data.get_mut(contestant).unwrap().get_mut(task).unwrap();
if data.0 < points {
data.0 = points;
data.1 = i;
}
}
let mut scoreboard: Vec<(&String, (u32, u32))> = player_data.iter().map(|(name, taskdata)| (name, (taskdata.iter().map(|x| x.0).sum(), taskdata.iter().map(|x| x.1).max().unwrap()))).collect();
scoreboard.sort_by(|a, b| b.1.0.cmp(&a.1.0).then(a.1.1.cmp(&b.1.1)).then(a.0.cmp(&b.0)));
let scoreboard: Vec<String> = scoreboard.iter().map(|x| format!("{} {}", x.0, x.1.0)).collect();
println!("{}", scoreboard.join("\n"));
}
fn get_task_index(name: &str) -> usize {
name.chars().next().unwrap().to_ascii_uppercase() as usize - 65
}Test details
Test 1
Group: 1, 3
Verdict: ACCEPTED
| input |
|---|
| 1 5000 10 zsyad zsyad J 14 zsyad A 40 zsyad D 34 ... |
| correct output |
|---|
| zsyad 1000 |
| user output |
|---|
| zsyad 1000 |
Test 2
Group: 2, 3
Verdict: ACCEPTED
| input |
|---|
| 100 5000 1 eayoy mkiie sqd mgq ... |
| correct output |
|---|
| ujogxx 100 dadxy 100 ttldevgm 100 awbj 100 j 100 ... |
| user output |
|---|
| ujogxx 100 dadxy 100 ttldevgm 100 awbj 100 j 100 ... Truncated |
Test 3
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100 5000 10 bsvhdn xlxadb gbc sadll ... |
| correct output |
|---|
| ezgermxsii 927 urclsrvlq 924 shgvs 919 xwkqtroxqr 918 oovi 893 ... |
| user output |
|---|
| ezgermxsii 927 urclsrvlq 924 shgvs 919 xwkqtroxqr 918 oovi 893 ... Truncated |
Test 4
Group: 1, 2, 3
Verdict: ACCEPTED
| input |
|---|
| 1 0 1 xoezwspspf |
| correct output |
|---|
| xoezwspspf 0 |
| user output |
|---|
| xoezwspspf 0 |
Test 5
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100 5000 10 bwv jxz cpktj mhzevc ... |
| correct output |
|---|
| afvgeut 0 ai 0 amfrsvuqao 0 beadkfbr 0 bkgztu 0 ... |
| user output |
|---|
| afvgeut 0 ai 0 amfrsvuqao 0 beadkfbr 0 bkgztu 0 ... Truncated |
Test 6
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 100 5000 10 yifvbbjcz cnpkni qvltt ngpe ... |
| correct output |
|---|
| vgyo 10 msgagpngrd 10 cnpkni 10 lpwlq 10 qguwtubeqi 10 ... |
| user output |
|---|
| vgyo 10 msgagpngrd 10 cnpkni 10 lpwlq 10 qguwtubeqi 10 ... Truncated |
