USACO section1.2 Miking cows

  1 /*
  2 ID: vincent63
  3 LANG: C
  4 TASK: milk2
  5 */
  6 #include <stdio.h>
  7 #include<stdlib.h>
  8 #include<string.h>
  9 struct time{
 10     int begin;
 11     int end;
 12     int len;
 13 };
 14 
 15 void sort(struct time t[],int n){
 16     int i,j;
 17     struct time temp;
 18     for(i=0;i<n;i++){
 19         for(j=i;j<n;j++){
 20             if(t[j].begin<t[i].begin){
 21                 
 22                 temp.begin=t[i].begin;
 23                 temp.end=t[i].end;
 24                 temp.len=t[i].len;
 25                 
 26                 t[i].begin=t[j].begin;
 27                 t[i].end=t[j].end;
 28                 t[i].len=t[j].len;
 29                 
 30                 t[j].begin=temp.begin;
 31                 t[j].end=temp.end;
 32                 t[j].len=temp.len;
 33                 
 34             }
 35         }
 36     }
 37 }
 38 void merge(struct time t[],int n){
 39     int i,j;
 40     for(i=0,j=1;j<n;i++,j++){
 41         if(t[i].end<t[j].begin){
 42             continue;
 43         }else if(t[i].end>=t[j].begin&&t[i].end<=t[j].end){
 44             t[i].end=t[j].end;
 45             t[j].begin=t[i].begin;
 46             t[i].len=t[i].end-t[i].begin;
 47             t[j].len=t[j].end-t[j].begin;
 48             
 49         }else if(t[i].end>t[j].end){
 50             t[j].begin=t[i].begin;
 51             t[j].end=t[i].end;
 52             t[j].len=t[j].end-t[j].begin;
 53         }
 54     }
 55 }
 56 int findmax(struct time t[],int n){
 57     int i,j;
 58     int max=0;
 59     for(i=0;i<n;i++){
 60         if(t[i].len>max){
 61             max=t[i].len;
 62         }
 63     }
 64     return max;
 65 }
 66 int findmin(struct time t[],int n){
 67     int temp[n];
 68     int i;
 69     int max=0;
 70     
 71     for(i=0;i<n-1;i++){
 72         temp[i]=t[i+1].begin-t[i].end;
 73         if(temp[i]>0&&temp[i]>max){
 74             max=temp[i];
 75         }
 76     }
 77     
 78     return max;
 79 }
 80 
 81 int main () {
 82     FILE *fin  = fopen ("milk2.in", "r");
 83     FILE *fout = fopen ("milk2.out", "w");
 84     
 85     int n,i;
 86     char buf[10];
 87     char buf2[20];
 88        
 89     fgets(buf,10,fin);
 90     n=atoi(buf); 
 91     
 92     struct time t[2*n];
 93     
 94     for(i=0;i<n;i++){
 95         int b,e;
 96         fgets(buf2,20,fin);
 97         sscanf(buf2,"%d %d",&b,&e);
 98         t[i].begin=b;
 99         t[i].end=e;
100         t[i].len=e-b;            
101     }
102     
103     sort(t,n); 
104     merge(t,n);    
105         
106     int max;
107     
108     max=findmax(t,n);
109     int min;
110     min=findmin(t,n);
111 
112     char res[10];
113     sprintf(res,"%d ",max);
114     fputs(res,fout);
115     sprintf(res,"%d
",min);
116     fputs(res,fout);
117     printf("%d %d
",max,min);
118     return 0;
119 }
原文地址:https://www.cnblogs.com/houshengtao/p/6102857.html