心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0

一个区间问题。

以下是我的代码:

#include<stdio.h>
typedef 
struct{
        
long begin,end;
}
length;
void qsort(length a[],long ii,long jj)
{/*快速排序,按 begin 升序排列*/
    
long i=ii,j=jj,mid=a[(ii+jj)/2].begin;
    length t;
    
do{
           
while(a[i].begin<mid) i++;
           
while(a[j].begin>mid) j--;
           
if(i<=j)
           
{
              t
=a[i];a[i]=a[j];a[j]=t;
              i
++; j--;
           }

    }
while(i<=j);
    
if(i<jj) qsort(a,i,jj);
    
if(j>ii) qsort(a,ii,j);
}

int main()
{
    length l[
20000];
    
long k,i,t,ans;
    scanf(
"%ld",&k);
    
for(i=0;i<k;i++)
    
{
      scanf(
"%ld%ld",&l[i].begin,&l[i].end);
      
if(l[i].begin>l[i].end)
      
{ t=l[i].begin;l[i].begin=l[i].end;l[i].end=t; }
    }

    qsort(l,
0,k-1);
    
for(i=0;i<k-1;i++)
    
{/*处理重叠区间*/
       
if( l[i].end>=l[i+1].begin && l[i+1].end>=l[i].end)
          l[i].end
=l[i+1].begin;
       
else if( l[i].begin<=l[i+1].begin && l[i].end>=l[i+1].end )
       
{
          t
=l[i].end;
          l[i].end
=l[i+1].begin;
          l[i
+1].end=t;
       }

    }

    ans
=0;
    
for(i=0;i<k;i++)
       ans 
+= l[i].end-l[i].begin;
    printf(
"%ld\n",ans);
return 0;
}

posted on 2010-01-06 19:16 lee1r 阅读(237) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:数据结构

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理