Submission #4040960


Source Code Expand

use std::io;
use std::io::BufRead;

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    let n = lines.nth(0).unwrap().unwrap().parse::<usize>().unwrap();

    let mut times: Vec<String> = Vec::with_capacity(n);
    times.extend(lines.map(|line| line.unwrap()));
    times.sort_by(|a, b| a[0..4].cmp(&b[0..4]));

    let mut times_iter = times.into_iter();
    let (mut start, mut end) = start_end_minutes(&times_iter.next().unwrap());
    start = round_off(start);
    end = round_up(end);

    let mut ordered = Vec::with_capacity(n);
    for time in times_iter {
        let (mut next_start, mut next_end) = start_end_minutes(&time);
        next_start = round_off(next_start);
        next_end = round_up(next_end);

        if end >= next_start {
            // keep start
            // override end
            end = if next_end >= end { next_end } else { end };
            continue;
        }

        ordered.push((start, end));

        start = next_start;
        end = next_end;
    }
    ordered.push((start, end));

    for (s, e) in ordered.into_iter() {
        println!("{:02}{:02}-{:02}{:02}", s / 60, s % 60, e / 60, e % 60);
    }
}

fn start_end_minutes(s: &str) -> (isize, isize) {
    let mut s = s.trim_right()
        .split("-");

    (
        change_num_to_minutes(parse_numbers(s.next().unwrap())),
        change_num_to_minutes(parse_numbers(s.next().unwrap()))
    )
}

fn parse_numbers<T: std::str::FromStr> (num_str: &str) -> T {
    num_str.parse::<T>().ok().unwrap()
}

fn change_num_to_minutes(num: isize) -> isize {
    let hours = num / 100;
    let minutes = num % 100;
    hours * 60 + minutes
}

fn round_off(num: isize) -> isize {
    if num % 5 == 0 {
        num
    } else {
        num - (num % 5)
    }
}

fn round_up(num: isize) -> isize {
    if num % 5 == 0 {
        num
    } else {
        num + (5 - num % 5)
    }
}

Submission Info

Submission Time
Task D - 感雨時刻の整理
User shotaf
Language Rust (1.15.1)
Score 100
Code Size 1981 Byte
Status AC
Exec Time 15 ms
Memory 6396 KB

Judge Result

Set Name all
Score / Max Score 100 / 100
Status
AC × 48
Set Name Test Cases
all 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, cho_cho_chokudai.txt, chokudai_ga_cho.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt
Case Name Status Exec Time Memory
00_sample_01.txt AC 2 ms 4352 KB
00_sample_02.txt AC 2 ms 4352 KB
00_sample_03.txt AC 2 ms 4352 KB
cho_cho_chokudai.txt AC 12 ms 6396 KB
chokudai_ga_cho.txt AC 10 ms 6396 KB
test_01.txt AC 2 ms 4352 KB
test_02.txt AC 2 ms 4352 KB
test_03.txt AC 2 ms 4352 KB
test_04.txt AC 2 ms 4352 KB
test_05.txt AC 2 ms 4352 KB
test_06.txt AC 2 ms 4352 KB
test_07.txt AC 2 ms 4352 KB
test_08.txt AC 2 ms 4352 KB
test_09.txt AC 2 ms 4352 KB
test_10.txt AC 2 ms 4352 KB
test_11.txt AC 2 ms 4352 KB
test_12.txt AC 2 ms 4352 KB
test_13.txt AC 2 ms 4352 KB
test_14.txt AC 2 ms 4352 KB
test_15.txt AC 2 ms 4352 KB
test_16.txt AC 2 ms 4352 KB
test_17.txt AC 2 ms 4352 KB
test_18.txt AC 2 ms 4352 KB
test_19.txt AC 2 ms 4352 KB
test_20.txt AC 2 ms 4352 KB
test_21.txt AC 15 ms 6396 KB
test_22.txt AC 15 ms 6396 KB
test_23.txt AC 14 ms 6396 KB
test_24.txt AC 14 ms 6396 KB
test_25.txt AC 15 ms 6396 KB
test_26.txt AC 14 ms 6396 KB
test_27.txt AC 12 ms 6396 KB
test_28.txt AC 14 ms 6396 KB
test_29.txt AC 2 ms 4352 KB
test_30.txt AC 2 ms 4352 KB
test_31.txt AC 4 ms 4352 KB
test_32.txt AC 2 ms 4352 KB
test_33.txt AC 10 ms 4352 KB
test_34.txt AC 2 ms 4352 KB
test_35.txt AC 2 ms 4352 KB
test_36.txt AC 14 ms 6396 KB
test_37.txt AC 14 ms 6396 KB
test_38.txt AC 14 ms 6396 KB
test_39.txt AC 14 ms 6396 KB
test_40.txt AC 14 ms 6396 KB
test_41.txt AC 8 ms 6396 KB
test_42.txt AC 14 ms 6396 KB
test_43.txt AC 9 ms 6396 KB