题目:http://hustoj.sinaapp.com/problem.php?id=1820
输入n个区间取并集,求最长的区间和最长的区间间隔。
思路:快排 另外一开始没考虑到如果只有一个区间的情况
#include <stdio.h> #include <stdlib.h> struct worktime { int start; int end; }time[5005]; int cmp(const void *a,const void *b) { return ((worktime *)a)->start-((worktime *)b)->start; } int main() { int n; int workmax=0,restmax=0; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d%d",&time[i].start,&time[i].end); } qsort(time,n,sizeof(worktime),cmp); int start=time[0].start; int end=time[0].end; int work=0; int rest=0; for(int i=1;i<n;i++) { if (time[i].start>end) { if(workmax<(end-start)) workmax=(end-start); if(restmax<(time[i].start-end)) restmax=(time[i].start-end); start=time[i].start; end=time[i].end; } else { if(time[i].end>end) end=time[i].end; if(workmax<(end-start)) workmax=(end-start); } } if(workmax==0) workmax=time[n-1].end-time[0].start; printf("%d %d\n",workmax,restmax); }
转载于:https://www.cnblogs.com/danielqiu/archive/2012/12/24/2831117.html