Codeforces 16D. Logging
传送门:https://codeforces.com/problemset/problem/16/D
题目大意:
题目会给你一串有顺序的时间,你需要做的是按照顺序判断,分实现这个序列最少需要几天,同时要注意到的是同一分钟最多只能有十行,如果有更多的,就需要到下一天这个时候来实现,同时,你要注意,12a.m.是凌晨12点。
主要想法:
我们两两比较相邻时间是否可以在同一天,如果可以,则不加一天,反之,加一天,同时我们应该注意到的是我们要记录相同时间点出现的次数,每十次加一天,并减十次。最后只需注意两个12点的问题就可以了。
代码实现:
#include <bits/stdc++.h>
using namespace std;
stack <pair<int,int> >a;
int main()
{
int n,m=0,i=1;
cin>>n;
while(n--)
{
int b,c;
char d,e,f[40];
scanf(" ");
scanf("%c",&d);
scanf("%d%c%d",&b,&e,&c);
gets(f);
b%=12;
if(f[1]=='p')b+=12;
if(m)
{
if((b<a.top().first)||(b==a.top().first&&c<a.top().second));
else m--;
if(b==a.top().first&&c==a.top().second)i++;
else i=1;
}
if(i>10){m++;i-=10;}
a.push({b,c});
m++;
}
cout<<m<<endl;
return 0;
}