Codeforces 16D Logging 题解

Codeforces 16D Logging 题解

题目

在这里插入图片描述原题链接

题意

根据日志计算日志最小间隔天数,一分钟只能生成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小时制转换成分钟数来方便比较。本题思路清晰,较为简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值