noip2000-2009提高组初赛-完善程序-题目.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
noip2000-2009提高组初赛-完善程序-题目

NOIP2009 五.完善程序 (前5空,每空2分,后6空,每空3分,共28分) 1.(最大连续子段和)给出一个数列(元素个数不多于100),数列元素均为负整数、正整数、0。请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。例如数列为4,-5,3,2,4时,输出9和3;数列为1 2 3 -5 0 7 8时,输出16和7。 var a: array[1..100] of integer; n, i, ans, len, tmp, beg: integer; begin read(n); for i := 1 to n do read(a[i]); tmp := 0; ans := 0; len := 0; beg :=______; for i := 1 to n do begin if tmp + a[i] ans then begin ans := tmp + a[i]; len := i - beg; end else if (______) and (i - beg len) then len := i - beg; if tmp + a[i]______ then begin beg :=______; tmp := 0; end else ______; end; writeln(ans, , len); end. 2. (寻找等差数列) 有一些长度相等的等差数列(数列中每个数都为0~59的整数),设长度均为L,将等差数列中的所有数打乱顺序放在一起。现在给你这些打乱后的数,问原先,L最大可能为多大?先读入一个数n(1=n=60),再读入n个数,代表打乱后的数。输出等差数列最大可能长度L。 var hash: array[0..60] of integer; n, x, ans, maxnum, i: integer; function work(now: integer): boolean; var ok: boolean; first, second, delta, i: integer; begin while ((______) and (hash[now]=0)) do inc(now); if now maxnum then begin work := true; exit; end; first := now; for second := first to maxnum do if hash[second] 0 then begin delta :=______; if first + delta *______ maxnum then break; if delta = 0 then ok:=(____________) else begin ok := true; for i := 0 to ans - 1 do ok :=______ and (hash[first+delta*i]0); end; if ok then begin for i := 0 to ans - 1 do dec(hash[first+delta*i]); if work(first) then begin work := true;exit; end; for i := 0 to ans - 1 do inc(hash[first+delta*i]); end; end; work := false; end; begin fillchar(hash, sizeof(hash), 0); read(n); maxnum := 0; for i := 1 to n do begin read(x); inc(hash[x]); if x maxnum then maxnum := x; end; for ans := n downto 1 do if (n mod ans = 0) and______ then begin writeln(ans); break; end; end. NOIP2008 五.完善程序(前6空,每空3分,后5空,每空2分,共28分)。 1.(找第k大的数)给定一个长度为1000000的无序正整数序列,以及另一个数n(1=n=1000000),接下来以类似快速排序的方法找到序列中第n大的数(关于

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档