1 条题解
-
0
C++ :
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; struct Line{ int startPoint; int endPoint; }; bool Cmpare(Line &lineA,Line &lineB){ return lineA.startPoint <lineB.startPoint; } int main(void){ int n = 0; // printf("请输入农民数量N:"); scanf("%d",&n); Line line[n]; for(int i = 0;i<n;i++){ // printf("%d\n",i); int startTime ,endTime = 0; scanf("%d%d",&line[i].startPoint,&line[i].endPoint); } // printf("************\n"); sort(line,line+n,Cmpare); // for(int i = 0;i<n;i++){ // printf("%d %d\n",line[i].startPoint,line[i].endPoint); // } Line lineMerge[n]; lineMerge[0].startPoint = line[0].startPoint; lineMerge[0].endPoint = line[0].endPoint; int lineNum = 1; for(int i = 1;i<n;i++){ if(line[i].startPoint <= lineMerge[lineNum-1].endPoint){ //如果下一段的起始点在上一段终点前,说明有可能可以合并,作判断 if(line[i].endPoint >= lineMerge[lineNum-1].endPoint){ lineMerge[lineNum-1].endPoint = line[i].endPoint; } }else{ // 如果下一段的起始点超过上一段终点,则计算新的线段 lineMerge[lineNum].startPoint = line[i].startPoint; lineMerge[lineNum].endPoint = line[i].endPoint; lineNum = lineNum +1; } } // for(int i = 0;i<lineNum;i++){ // printf("%d %d\n",lineMerge[i].startPoint,lineMerge[i].endPoint); // } int maxTime = lineMerge[0].endPoint - lineMerge[0].startPoint; int minTime = 0; for(int i = 1;i<lineNum;i++){ if(lineMerge[i].endPoint - lineMerge[i].startPoint>maxTime){ maxTime = lineMerge[i].endPoint - lineMerge[i].startPoint; } if(lineMerge[i].startPoint - lineMerge[i-1].endPoint>minTime){ minTime = lineMerge[i].startPoint - lineMerge[i-1].endPoint; } } printf("%d %d",maxTime,minTime); }
- 1
信息
- ID
- 2710
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者