2024年5月11日发(作者:)

2013年安庆市“移动杯”青少年信息学奥林匹克竞赛 小学组试题题解

第一题 average

这题要考虑去除多个最高分和最低分的情况,但也是一道水题。

程序如下:

program average;

var

i,x,ans,n,max,min,ans2,k:longint;

begin

assign(input,'');

reset(input);

assign(output,'');

rewrite(output);

readln(n);

min:=maxlongint;

max:=-maxlongint;

for i:=1 to n do

begin

read(x);

k:=k+x;

if x>max then begin max:=x;ans:=1;end;

if x

if x=max then inc(ans);

if x=min then inc(ans2);

end;

write((k-ans*max-ans2*min)/(n-ans-ans2):0:2);

close(input);

close(output);

end.

第二题 base;

完全水题,不必多说。

program base;

var

a:array[1..1000] of longint;

i,n,x,max,ans,ans1:longint;

begin

assign(input,'');

reset(input);

assign(output,'');

rewrite(output);

readln(n);

for i:=1 to n do

begin

read(x);

inc(a[x]);

if x>max then max:=x;

end;

for i:=1 to max do

if a[i]>ans then begin ans:=a[i];ans1:=i;end;

write(ans1,' ',ans);

close(input);

close(output);

end.

第三题:求最大子序列(动态规划)

本题是线形动规,较为简单。

program energy;

var

a,b:array[1..3000] of longint;

i,k,n:longint;

begin

assign(input,'');

reset(input);

assign(output,'');

rewrite(output);

readln(n);

for i:=1 to n do read(a[i]);

b[1]:=a[1];

k:=b[1];

for i:=2 to n do

begin

if b[i-1]>0 then b[i]:=b[i-1]+a[i]

if b[i]>k then k:=b[i];

end;

write(k);

close(input);

close(output);

end.

第四题:线形动规

program skate;

var

a,p,q:array[1..1000000] of longint;

i,n,max:longint;

begin

assign(input,'');

reset(input);

assign(output,'');

rewrite(output);

readln(n);

else b[i]:=a[i];

for i:=1 to n do

read(a[i]);

p[1]:=1;

q[n]:=1;

for i:=2 to n do

if a[i-1]>=a[i] then p[i]:=p[i-1]+1 else p[i]:=1;

for i:=n-1 downto 1 do

if a[i+1]>=a[i] then q[i]:=q[i+1]+1 else q[i]:=1;

max:=0;

for i:=1 to n do

if p[i]+q[i]>max then max:=p[i]+q[i];

write(max-2);

close(input);

close(output);

end.