很简单的排序题而已。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int M=500005;
struct Matter{
int bgn,en;
bool operator <(const Matter &a) const{
if(bgn<a.bgn) return true;
return false;
}
}Ma[M];
int main(){
int n,bh,bm,eh,em;
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%d:%d %d:%d",&bh,&bm,&eh,&em);
Ma[i].bgn=bh*60+bm; Ma[i].en=eh*60+em;
}
sort(Ma,Ma+n);
int en=0;
int ans=0;
for(int i=0;i<n;i++){
if(Ma[i].bgn>en){
ans+=(Ma[i].bgn-en);
en=Ma[i].en;
}
else if(Ma[i].bgn<=en){
if(Ma[i].en>en)
en=Ma[i].en;
}
}
if(en<1440)
ans+=1440-en;
printf("%d\n",ans);
}
return 0;
}