CF16D题解

CF16D Logging 原题

讲解

这道题大体思路是:

  • 先不断读入,为了节省空间(当然这可以不需要),我们可以直接在读入后进行操作,输入可以用 scanf(更方便),但我给的代码就直接使用 cin
  • 接着就进行直接判断,可以先将时,分转化成目前离当日 \(00:00\) 过去了多长时间,这要好计算,再判断大小,要是之前时间 \(>\) 现在时间,则时光倒流了又过了一天
  • 切记,还要有一个计数器,初值为一,如果之前时间\(=\)现在时间,则计数器 \(+1\) ,否则计数器变为 \(1\) ,如果计数器值大于 \(10\),则又过了一天,并将计数器的值改为 \(1\)

code

#include<iostream>
using namespace std;
int main()
{
	int n;
	int cnt = 1;
	int lastt = -1;//上一次的
	int ans = 1;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		int h, m, t;
		string s, nouse1/*后面的命令,没用!*/;
		char nouse2/*一开始的[和后面的:*/;
		cin >> nouse2 >> h >> nouse2 >> m >> s;
		getline(cin, nouse1);//输入
		h %= 12;//不能少
		if (s == "a.m.]:")t = h * 60 + m;午
		else t = 720 + h * 60 + m;
		if (lastt == t)//如果之前和现在相同,计数器+1
		{
			cnt++;
		}
		else
		{
			cnt = 1;
		}
		if (lastt > t || cnt > 10)
		{
			ans++;
			cnt = 1;
		}

		lastt = t;


	}
	cout << ans;
	return 0;
}

感谢 NaOH_Frog 大佬。

posted @ 2021-07-27 20:24  WiccldCute  阅读(74)  评论(0)    收藏  举报