use std::{
collections::HashMap,
io::{self, Read},
};
fn main() {
let mut input = String::new();
io::stdin()
.read_to_string(&mut input)
.expect("Failed to read input");
let mut scan = input.split_whitespace();
let mut next_num = || scan.next().unwrap().parse::<usize>().unwrap();
let days = next_num();
let first_day_meetings_count = next_num();
let mut timeline: Vec<Vec<usize>> = Vec::with_capacity(days);
// create first day meetings:
timeline.push(vec![0; first_day_meetings_count]);
for _ in 1..days {
let cnt = next_num();
let mut meetings: Vec<usize> = Vec::with_capacity(cnt);
for _ in 0..cnt {
meetings.push(next_num());
}
timeline.push(meetings);
}
let mut current_members_by_meeting: HashMap<usize, usize> = HashMap::new();
let mut next_members_by_meeting: HashMap<usize, usize> = HashMap::new();
let mut max_day_members = 0;
for meetings in timeline.into_iter().rev() {
next_members_by_meeting.clear();
let mut day_members = 0;
for (i, &meeting_ref) in meetings.iter().enumerate() {
let meeting_num = i + 1;
let meeting_members = current_members_by_meeting
.get(&meeting_num)
.copied()
.unwrap_or(1);
day_members += meeting_members;
if meeting_ref > 0 {
next_members_by_meeting
.entry(meeting_ref)
.and_modify(|v| *v += meeting_members)
.or_insert(meeting_members);
}
}
std::mem::swap(
&mut current_members_by_meeting,
&mut next_members_by_meeting,
);
max_day_members = max_day_members.max(day_members);
}
println!("{}", max_day_members);
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | use std::{ collections::HashMap, io::{self, Read}, }; fn main() { let mut input = String::new(); io::stdin() .read_to_string(&mut input) .expect("Failed to read input"); let mut scan = input.split_whitespace(); let mut next_num = || scan.next().unwrap().parse::<usize>().unwrap(); let days = next_num(); let first_day_meetings_count = next_num(); let mut timeline: Vec<Vec<usize>> = Vec::with_capacity(days); // create first day meetings: timeline.push(vec![0; first_day_meetings_count]); for _ in 1..days { let cnt = next_num(); let mut meetings: Vec<usize> = Vec::with_capacity(cnt); for _ in 0..cnt { meetings.push(next_num()); } timeline.push(meetings); } let mut current_members_by_meeting: HashMap<usize, usize> = HashMap::new(); let mut next_members_by_meeting: HashMap<usize, usize> = HashMap::new(); let mut max_day_members = 0; for meetings in timeline.into_iter().rev() { next_members_by_meeting.clear(); let mut day_members = 0; for (i, &meeting_ref) in meetings.iter().enumerate() { let meeting_num = i + 1; let meeting_members = current_members_by_meeting .get(&meeting_num) .copied() .unwrap_or(1); day_members += meeting_members; if meeting_ref > 0 { next_members_by_meeting .entry(meeting_ref) .and_modify(|v| *v += meeting_members) .or_insert(meeting_members); } } std::mem::swap( &mut current_members_by_meeting, &mut next_members_by_meeting, ); max_day_members = max_day_members.max(day_members); } println!("{}", max_day_members); } |
English