- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)