- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
                        查看更多
                        
                    
                试题:
有n个闭区间[ai,bi],其中i=1,2,……,n。这些区间代表一系列没有交点的闭区间。任务是去寻找这些区间的代表,力求仅需最少的区间数覆盖整个区间。这些区间代表应该以上升的顺序写在输出文件。我们说区间[a,b]和[c,d]是上升的顺序是指当且仅当a≤b≤c≤d。
  
    1.从文件PRZ.IN中读一系列的区间;
    2.计算出满足上述条件的无交点的闭区间;
    3.将得出区间以上升的顺序写入文件PRZ.OUT。
  
    文件PRZ.IN的第一行有一个整数n,3≤n≤50000,这是区间数目。在第i+1行,1≤i≤n,有一个区间[ai,bi]的描述,描述的形式是以两个由空格分隔开的ai,bi表示,ai,bi分别表示区间的开始和结束,1≤ai≤bi≤1000000。
  
文件PRZ.OUT包含所有计算出的没有交点的区间。在第一行都有一个区间的描述。它包含2个整数,整数间由空格分开,区的开始与结束都是独立的。这些区间应该以上升的顺序写入输出文件。
   
	容易发现,若将每个区域映射到一条坐标轴上,
  
	题目实际上就是求坐标轴上共有几段被映射。
 
由于给定区间使无序的,难加以分析。所以不妨对所有的区间排一次序,看看是否更容易处理。例如说,按值从小到大进行排序,
    
设题目所要求的区间为,,。
显然,,,但到底取何值呢?因为,所以当时,,也就是说已知区间2到区间N都在区间1的右边,故只能取到;
当时,显然应满足,再看已知区间3,因为,所以当时,,也就是说已知区间3到区间N都在区间2的右边,故只能取到;当时,显然应满足,再看区间4……以此类推,总可以把得知确定下来,并且由上述推断过程,不难发现,总是包含了排序后前面的若干个已知区间,而也可以用同样的方法做。
 
算法设计:
至此,本体算法的大致框架已不难得到:
首先按值从小到大将所有区间排序;
按一下方法计算每一个区间:
,,
 不断的
    
    如果那么
输出区间;{已经确定}
 
    否则
  直到 
  输出区间
 
性能分析:
时间复杂度:{采用快速排序的复杂度}
空间需求:
 
启发与总结:
将无序的区间转化成有序的区间使本题的关键。将没有条理(无序)
 
{$O-,P-,Q-,R-,S-}
{$M 65521,0,655360}
 
program Prz;
 
const
  Fn1 = Prz.In;
  Fn2 = Prz.Out;
  MaxN = 49999;
  T = 10000;
 
type
  List = array[0 .. T - 1] of Longint;
 
var
  N, M, P: Word;
  A, B: array[0 .. MaxN DIV T] of ^List;
 
procedure Init;
var
  i, j: Word;
begin
  Assign(Input, Fn1); Reset(Input);
  Readln(N); Dec(N);
  M := N DIV T; P := N MOD T;
  for i := 0 to M do
    begin
      New(A[i]); New(B[i])
    end;
  i := 0; j := 0; Read(A[0]^[0], B[0]^[0]);
  repeat
    Inc(j);
    if j = T then
      begin
        Inc(i); j := 0
      end;
    Read(A[i]^[j], B[i]^[j])
  until (i = M) and (j = P);
  Close(Input); Randomize
end;
 
procedure Sort(l, r: Word);
var
  i, ii, j, jj, k, x, y: Longint;
begin
  i := l DIV T; ii := l MOD T;
  j := r DIV T; jj := r MOD T;
  k := l + Random(r - l + 1);
  x := a[k DIV T]^[k MOD T];
  repeat
    while a[i]^[ii]  x do
      if ii = T - 1 then
        begin
          Inc(i); ii := 0
        end
      else Inc(ii);
    while x  a[j]^[jj] do
      if jj = 0 then
        begin
          Dec(j);
                 原创力文档
原创力文档 
                        

文档评论(0)