洛谷 AT763【感雨時刻の整理】

题目描述

雨の降っていた時刻というのは、降水量と並んで重要です。今、ある 11 日の、雨が降っていた時刻に関するメモが見つかったので、これを整理して、雨の降っていた時刻を調べたいと思います。

整理は、以下の規則に従って行います。

  • 感雨時間のメモから、その日 11 日の雨の降っていた時刻を時系列順に出す。日付を超えて降っている雨は、 00:0000:00 降り始めや 24:0024:00 降り終わりとして扱われるものとし、日付をまたぐようなメモは入力されない。
  • 雨の降り始め・降り終わりはそれぞれ直前・直後の 55 分単位の時刻に丸める。例えば、 13:2313:23 に降り始めて 14:0114:01 にやんだ雨は、 13:2013:20 から 14:0514:05 まで降っていたということにする。
  • 丸めた後の結果において、 22 つ以上のメモに書かれていた感雨時刻が重複した場合、 11 つの連続した雨とみなす。例えば、 11:0611:06 に降り始めて 11:2311:23 にやんだ雨、 11:2911:29 に降り始めて 12:0312:03 にやんだ雨、 11:4811:48 に降り始めて 12:1012:10 にやんだ雨の 33 つがあった場合、 11:0511:05 〜 11:2511:25 、 11:2511:25 〜 12:0512:05 、 11:4511:45 〜 12:1012:10 の 33 つの雨であるが、時間がかぶっているところをくっつけて 11:0511:05 から 12:1012:10 まで降っていた、 11 つの連続した雨ということにする。

    メモの内容が入力される時、雨の降っていた時刻を、この規則に合致するよう整理して出力するプログラムを作成してください。

输入输出格式

输入格式:

输出格式:

雨が降っていた時刻を整理して、降り始めの時刻の早い順番に、降り始めた時刻と降り終わりの時刻をハイフンで区切って出力せよ。
その際、連続した 11 つの雨を 11 行に出力し、時刻の形式は入力と同じ形式を用いること。
また、出力の末尾には改行を入れること。

 

解题思路

  第一步肯定先去翻译,剩下的题解里见(洛谷唯一一个提交的,好孤独)。

 

题解

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 string sj[1000001];
 4 int main()
 5 {
 6     int n;
 7     string s;
 8     string x,y,x1,y1;
 9     scanf("%d",&n);
10     for(int i=1;i<=n;i++)
11     {
12         cin>>s;
13         if(s[3]>='1'&&s[3]<='4')s[3]='0';//舍去 
14         else if(s[3]>='6'&&s[3]<='9')s[3]='5';//舍去 
15         if(s[8]>='1'&&s[8]<='4')s[8]='5';//向大的约 
16         else if(s[8]>='6'&&s[8]<='9')//向大的约,进位 
17         {
18             s[8]='0';
19             if(s[7]=='5')//分钟要约 
20             {
21                 s[7]='0';
22                 if(s[6]=='9')//进位 
23                 {
24                     s[6]='0';
25                     s[5]++;
26                 }
27                 else s[6]++;
28             }
29             else s[7]++;
30         }
31         sj[i]=s;
32     }
33     sort(sj+1,sj+1+n);
34     x=sj[1].substr(0,4);
35     y=sj[1].substr(5,4);
36     for(int i=2;i<=n;i++)
37     {
38         x1=sj[i].substr(0,4);
39         y1=sj[i].substr(5,4);
40         if(x1>=x&&x1<=y&&y1>=y){sj[i]=x+'-'+y1;x=x;y=y1;continue;}
41         else if(x1>=x&&x1<=y&&y1>=x&&y1<=y){sj[i]=x+'-'+y;continue;}//各种判断,理解靠自己 
42         else{
43             x=x1;
44             y=y1;
45             cout<<sj[i-1]<<endl;
46             }
47     }
48     cout<<sj[n]<<endl;
49     return 0;
50 }

 

转载于:https://www.cnblogs.com/hualian/p/11166291.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值