题目
题意
根据日志计算日志最小间隔天数,一分钟只能生成10条记录。
代码
#include <bits/stdc++.h>
using namespace std;
int ctoi (char x)
{
return x-'0';
}
int main() {
char str[100][200];
vector<int> str24;
int n,temp;
cin>>n;
getchar();
for (int tmp=0;tmp<n;tmp++)
{
gets(str[tmp]);
temp=0;
if (str[tmp][7]=='a')
{
if (str[tmp][1]=='1'&&str[tmp][2]=='2')
temp+=ctoi(str[tmp][4])*10+ctoi(str[tmp][5]);
else temp+=ctoi(str[tmp][1])*10*60+ctoi(str[tmp][2])*60+ctoi(str[tmp][4])*10+ctoi(str[tmp][5]);
}
else{
if (str[tmp][1]=='1'&&str[tmp][2]=='2')
temp+=12*60+ctoi(str[tmp][4])*10+ctoi(str[tmp][5]);
else temp+=12*60+ctoi(str[tmp][1])*10*60+ctoi(str[tmp][2])*60+ctoi(str[tmp][4])*10+ctoi(str[tmp][5]);
}
str24.push_back(temp);
}
int day=1,count=1,def=str24[0];
for (int i=1;i<n;i++)
{
if (str24[i]==def)
{
count++;
}
else if (str24[i]<def)
{
count=1;
day++;
}
else count=1;
if (count>10)
{
count=1;
day++;
}
def=str24[i];
}
cout<<day;
return 0;
}
思路
首先将所有日志时间转为分钟,再进入循环比较,将本次的与上一个比较,如果结果<0则加一天,等于0则在计数器上加1,计数器满10进一天,注意凌晨12点是12:00 am,计数器和天数刚开始都要是1即可(初始比较点本就要算一个,计数器是用来记录一个值出现的次数的;有日志天数至少是1)。
总结
本题2000分,注意考虑三个点:凌晨12点之后算新的一天(不包括12点);计数器如何计数;要将12小时制转换成分钟数来方便比较。本题思路清晰,较为简单。