心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0
<2010年2月>
31123456
78910111213
14151617181920
21222324252627
28123456
78910111213

留言簿(15)

随笔分类(415)

随笔档案(400)

搜索

  •  

最新随笔

最新评论

评论排行榜

一个区间问题。

以下是我的代码:

#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 阅读(252) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:数据结构

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