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\n",min); 116 fputs(res,fout); 117 printf("%d %d\n",max,min); 118 return 0; 119 }