Submission #3472899


Source Code Expand

using System;
using System.Collections.Generic;
using System.Linq;

namespace ABC001
{
    public class ABC001_D
    {
        static void Main(string[] args)
        {
            ABC001_D instance = new ABC001_D();
            instance.Answer();
        }

        public class WhetherReport
        {
            public string rainDuration;

            public WhetherReport DataUpdate()
            {
                WhetherReport updatedReport = new WhetherReport();

                int beginningRainTime = GetBeginningRainTime();
                int endingRainTime = GetEndingRainTime();

                beginningRainTime -= beginningRainTime % 5;

                int endingTimeDiff = (endingRainTime % 5);
                endingRainTime += (endingTimeDiff != 0 ? 5 - endingTimeDiff : 0);


                if (endingRainTime % 100 == 60)
                {
                    endingRainTime += 40;
                }

                if (beginningRainTime % 100 == 60)
                {
                    beginningRainTime += 40;
                }

                string begin = beginningRainTime.ToString().PadLeft(4, '0');
                string end = endingRainTime.ToString().PadLeft(4, '0');

                updatedReport.rainDuration = $"{begin}-{end}";

                return updatedReport;
            }

            public override string ToString()
            {
                return $"{rainDuration}";
            }

            public int GetBeginningRainTime()
            {
                return int.Parse(rainDuration.Split('-')[0]);
            }

            public int GetEndingRainTime()
            {
                return int.Parse(rainDuration.Split('-')[1]);
            }

            public bool IsBetweenTheDays(WhetherReport other)
            {
                bool betweenBeginRainTime = GetBeginningRainTime() <= other.GetBeginningRainTime() &&
                                            other.GetBeginningRainTime() <= GetEndingRainTime();
                return betweenBeginRainTime;
            }
            
            public override bool Equals(object obj)
            {
                var p = obj as WhetherReport;
                if (p == null)
                    return false;
                return ToString().Equals(p.ToString());
            }
        }

        public class WhetherReportComparer : IEqualityComparer<WhetherReport>
        {
            public bool Equals(WhetherReport i_lhs, WhetherReport i_rhs)
            {
                return i_lhs.rainDuration == i_rhs.rainDuration;
            }

            public int GetHashCode(WhetherReport i_obj)
            {
                return i_obj.rainDuration.GetHashCode();
            }
        }

        public void Answer()
        {
            int rainNum = Int32.Parse(Console.ReadLine());
            List<WhetherReport> whetherReports = new List<WhetherReport>();
            for (int i = 0; i < rainNum; i++)
            {
                WhetherReport report = new WhetherReport();
                report.rainDuration = Console.ReadLine();
                whetherReports.Add(report);
            }

            WhetherReportComparer comparer = new WhetherReportComparer();
            whetherReports = whetherReports.Distinct(comparer).ToList();

            whetherReports = whetherReports.Select(d => d.DataUpdate()).ToList();

            whetherReports = whetherReports.Distinct(comparer).ToList();
            whetherReports.Sort((a, b) => a.GetBeginningRainTime() - b.GetBeginningRainTime());

            List<WhetherReport> foldingReports = new List<WhetherReport>();
            var beginFoldingReport = whetherReports[0];

            for (int i = 1; i < whetherReports.Count; i++)
            {
                var nextReport = whetherReports[i];

                if (beginFoldingReport.IsBetweenTheDays(nextReport))
                {

                    WhetherReport combineReport = new WhetherReport();
                    if (beginFoldingReport.GetEndingRainTime() <= nextReport.GetEndingRainTime())
                    {
                        var beginTime = beginFoldingReport.GetBeginningRainTime().ToString().PadLeft(4, '0');
                        var endTime = nextReport.GetEndingRainTime().ToString().PadLeft(4, '0');
                        combineReport.rainDuration = $"{beginTime}-{endTime}";
                    }
                    else
                    {
                        var beginTime = beginFoldingReport.GetBeginningRainTime().ToString().PadLeft(4, '0');
                        var endTime = beginFoldingReport.GetEndingRainTime().ToString().PadLeft(4, '0');
                        combineReport.rainDuration = $"{beginTime}-{endTime}";
                    }

                    beginFoldingReport = combineReport;
                }
                else
                {
                    foldingReports.Add(beginFoldingReport);
                    beginFoldingReport = nextReport;
                }
            }

            foldingReports.Add(beginFoldingReport);

            foreach (var whetherReport in foldingReports)
            {
                Console.WriteLine(whetherReport.ToString());
            }
        }
    }
}

Submission Info

Submission Time
Task D - 感雨時刻の整理
User sim_mokomo
Language C# (Mono 4.6.2.0)
Score 100
Code Size 5378 Byte
Status AC
Exec Time 465 ms
Memory 27848 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 27 ms 9428 KB
00_sample_02.txt AC 26 ms 11476 KB
00_sample_03.txt AC 27 ms 11476 KB
cho_cho_chokudai.txt AC 35 ms 9696 KB
chokudai_ga_cho.txt AC 465 ms 27120 KB
test_01.txt AC 29 ms 11476 KB
test_02.txt AC 29 ms 11476 KB
test_03.txt AC 29 ms 11476 KB
test_04.txt AC 29 ms 11476 KB
test_05.txt AC 29 ms 11476 KB
test_06.txt AC 31 ms 11476 KB
test_07.txt AC 29 ms 11476 KB
test_08.txt AC 29 ms 11476 KB
test_09.txt AC 28 ms 13504 KB
test_10.txt AC 28 ms 11456 KB
test_11.txt AC 27 ms 9408 KB
test_12.txt AC 31 ms 11452 KB
test_13.txt AC 30 ms 11476 KB
test_14.txt AC 34 ms 13548 KB
test_15.txt AC 33 ms 13472 KB
test_16.txt AC 30 ms 11476 KB
test_17.txt AC 36 ms 11460 KB
test_18.txt AC 30 ms 9428 KB
test_19.txt AC 35 ms 15532 KB
test_20.txt AC 35 ms 11436 KB
test_21.txt AC 249 ms 23732 KB
test_22.txt AC 350 ms 27848 KB
test_23.txt AC 289 ms 23736 KB
test_24.txt AC 357 ms 25792 KB
test_25.txt AC 338 ms 21740 KB
test_26.txt AC 46 ms 20320 KB
test_27.txt AC 36 ms 11744 KB
test_28.txt AC 70 ms 21216 KB
test_29.txt AC 27 ms 11476 KB
test_30.txt AC 28 ms 11476 KB
test_31.txt AC 37 ms 13536 KB
test_32.txt AC 27 ms 11476 KB
test_33.txt AC 46 ms 15584 KB
test_34.txt AC 27 ms 11476 KB
test_35.txt AC 29 ms 9428 KB
test_36.txt AC 400 ms 27064 KB
test_37.txt AC 52 ms 18784 KB
test_38.txt AC 47 ms 18400 KB
test_39.txt AC 90 ms 22332 KB
test_40.txt AC 93 ms 24256 KB
test_41.txt AC 38 ms 11744 KB
test_42.txt AC 39 ms 13792 KB
test_43.txt AC 38 ms 15712 KB