Problem 2013 : Osaki

問題概要

日本語なので本文参照。(http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=2013&lang=jp


電車の発車時刻と到着時刻の表が与えられたとき、必要な電車の数を求める。

解法

区間スケジューリングの典型問。
すなわち、終了時間の早い順にタスクをソートし、重なりが最も大きくなる部分の重なりを答えればよい。

ソースコード

char in[20];
int n;
pi t[20000];

int main()
{
	while(scanf("%d",&n),n)
	{
		rep(i,n)rep(j,2)
		{
			int h,m,s; scanf("%d:%d:%d",&h,&m,&s);
			t[i*2+j]=mp(h*3600+m*60+s,1-j);
		}
		sort(t,t+2*n);
		
		int ans=0,c=0;
		rep(i,2*n)
		{
			if(t[i].second)c++; else c--;
			ans=max(ans,c);
		}
		printf("%d\n",ans);
	}
	return 0;
}