L2-055 胖达的山头

L2-055胖达的山头

解题思路

先把时间换算成秒,输入的时候可以用scanf,然后用一个cnt[100010],一天有86400秒,数组大小足够,然后对于开始时间st,cnt[st]++,对于结束时间ed,cnt[ed+1]-- , 这里的ed+1是因为,题目要求任意一个时刻都不能同时有多个熊猫,所以只有在ed+1的时刻,该熊猫才会消失。

在遍历整个数轴的时候,不断地加cnt[i],取每个时刻的最大值。这样来看其实就是差分,将一个区间的变化,变成2个点的变化,求它的前缀和能得到每一时刻的熊猫有多少个,可以想一下这个图。

ac✅️代码

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>

using namespace std;

int cnt[100010] ;

int main()
{
		int n;cin>>n;
		for(int i = 0 ; i < n ; i++)
		{
			int hh,mm,dd,hh1,mm1,dd1;
			scanf("%d:%d:%d %d:%d:%d",&hh,&mm,&dd,&hh1,&mm1,&dd1);
			int st = hh * 3600 + mm * 60 + dd;
			int ed = hh1 * 3600 + mm1 * 60  + dd1;
			cnt[st]++;
			cnt[ed + 1] --;
			
		}
		
		int cur = 0;
		int ans = 0;
		for(int i = 0 ; i <= 86400; i++)
		{
			cur += cnt[i];
			ans = max(cur,ans);	
		}
		cout<<ans<<endl;
		return 0;
}
posted @ 2026-03-22 14:33  shuiwangrenjia  阅读(75)  评论(0)    收藏  举报