前言
“雨说天空会流泪,咖啡说生活要习惯苦味,我说人活着简直就是受罪。”欢迎来到嘟嘟课堂。今天,我们来讲一道暴力题——愤怒的奶牛。
题目描述
F 奶牛 Bessie 设计出了一个热门电玩游戏“愤怒的奶牛”。玩家用弹弓弹射一头牛,目标是前方一排位于数字线上不同点的干草包; 奶牛撞击干草后能产生足够的能量使干草包爆炸,干草包爆炸后又可能造成连锁反应,导致附近的干草包爆炸。任务是用一头牛轰击干草包,让干草包连锁反应,并且尽可能多的引爆干草包。
有 n 捆位于不同整数位置 X1,X2,… Xn 的干草。一开始如果奶牛撞击位于 x 位置上的干草包,那么 x 位置上的干草就会被引爆,并且这个干草包爆炸的“爆炸半径”为 1,这意味着任何其他干草包在一个单位的距离内也被引爆。然后这些相邻的包子自身爆炸同事也会引爆它边上的干草,每个爆炸半径都为 2,所以这些爆炸可能会将另外相距最多 2 个距离的未爆炸的干草继续引爆。在下一个时间步骤中,这些包也会以引爆半径 3 来引爆其它干草。每增加一次连锁爆炸,那么引爆半径就增加 1.
你的任务就是确定奶牛应该撞击哪个干草包,最后能引爆最多的干草包。、
输入
第一行一个整数 n 表示有多少干草包(1 ≤ n≤100)。
接下来 n 行每行一个整数,表示干草包的位置 x。(0≤x≤1000000000)
输出
输出一个数,表示奶牛最多能引爆的干草包数量。
样例输入
6
8
5
6
13
3
4
样例输出
5
样例说明
奶牛撞击 5 号干草包,接着将导致 4 号和 6 号的包爆炸,再接着引爆半径 2。这些爆炸反过来又导致 3 号和 8 号的包爆炸,但这些最后的爆炸力不够强大,无法到达 13 号包。
思路
本题纯属暴力。这些炸弹包会发生连锁反应。一头奶牛(胡晟智)向一个干草包(高珏颐)撞过去(啊!!!高姐保重!!!),干草包就会爆炸(胡晟智英勇牺牲),还会发生连锁反应(胡晟智觉得一个女生还不够,要多几个更好玩)。
应为数据不大(1..100),所以这题我们就来枚举。枚举一个干草包,然后将它左边和右边的干草包能搞爆的就搞爆。最后算出最大的答案就行了。
代码
var
a:array[1..100] of longint;
i,j,k,n,l,r,ls,rs,kpz,max,sb1,sb2:longint;
p,pp:boolean;
begin
readln(n);
for i:=1 to n do
readln(a[i]);
for i:=1 to n-1 do
begin
for j:=i+1 to n do
begin
if (a[i]>a[j]) then
begin
kpz:=a[i];
a[i]:=a[j];
a[j]:=kpz;
end;
end;
end;
for i:=1 to n do
begin
sb1:=i;
sb2:=i;
ls:=1;
rs:=1;
l:=0;
r:=0;
repeat
p:=false;
while (i-l-1>0) and (a[sb1]-a[i-l-1]<=ls) do
begin
inc(l);
p:=true;
end;
inc(ls);
sb1:=i-l;
until p=false;
repeat
pp:=false;
while (i+r+1<=n) and (a[i+r+1]-a[sb2]<=rs) do
begin
inc(r);
pp:=true;
end;
inc(rs);
sb2:=i+r;
until pp=false;
if (l+r+1>max) then max:=l+r+1;
end;
writeln(max);
end.