Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
it should be dpIn Reply To:what's wrong? Posted by:PK_ILGYU at 2006-01-20 19:41:36 > #include<stdio.h> > #include<stdlib.h> > #define Max_n 1000 > > int Dap; > > int N,T,M; > > struct data1{ > int a,b; > }Data[Max_n+1]; > > void init() > { > int i; > > //FILE *fin=fopen("2430.in","r"); > //fscanf(fin,"%d %d %d",&N,&T,&M); > scanf("%d %d %d",&N,&T,&M); > > for(i=1; i<=N; i++){ > // fscanf(fin,"%d %d",&Data[i].a,&Data[i].b); > scanf("%d %d",&Data[i].a,&Data[i].b); > } > // fclose(fin); > } > > int sortf(const void *a, const void *b) > { > struct data1 *p=(struct data1 *)a; > struct data1 *q=(struct data1 *)b; > > if(p->b > q->b) return 1; > if(p->b < q->b) return -1; > if(p->a > q->a) return 1; > if(p->a < q->a) return -1; > return 0; > } > > void process() > { > int i,s,e,k,sw,st,ed,mid,l,cnt; > > s=1; e=100000000; > > for(;;){ > if(s>e) break; > mid=(s+e)/2; > l=mid*2+2; > > st=Data[1].b; ed=st+(l-2)/2-1; k=Data[1].a; cnt=1; sw=0; > for(i=2; i<=N; i++){ > if(Data[i].b>ed){ > cnt++; > if(cnt==T+1) break; > st=Data[i].b; ed=st+(l-2)/2-1; k=Data[i].a; sw=0; > }else if(Data[i].b==ed && sw==0){ > if(k!=Data[i].a){ > cnt++; > if(cnt==T+1) break; > st=Data[i].b; ed=st+(l-2)/2-1; k=Data[i].a; sw=0; > } > }else{ > if(k!=Data[i].a){ > if(sw==0){ > sw=1; > ed--; > } > } > } > } > if(i==N+1){ > Dap=l; > e=mid-1; > }else{ > s=mid+1; > } > } > } > > void output() > { > printf("%d",Dap); > } > > int main() > { > init(); > qsort(&Data[1],N,sizeof(Data[0]),sortf); > process(); > output(); > return 0; > } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator