区间覆盖解题报告.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

mhk8089 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档