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.
发布评论