这道题看起来很难,其实只要发现其中的规律就很简单了。(这不是废话吗!!!!)
我们可以发现两组数的差其实每个对应的数前面的正负号相反。于是,我们就可以暴力枚举找到每个状态的最大值和最小值。它们的差值便是答案。
程序如下:
var
a,b,c,d,e:array[1..131072]of real;
aa:array[0..64,1..8]of longint;
sum:array[0..64,1..131072]of real;
mini,maxi,n,m,i,j,k:longint;
ans,maxx,max,min:real;
begin
for k:=0 to 63 do
begin
if k or 1<>k then
aa[k,1]:=1
else
aa[k,1]:=-1;
if k or 2<>k then
aa[k,2]:=1
else
aa[k,2]:=-1;
if k or 4<>k then
aa[k,2]:=1
else
aa[k,2]:=-1;
if k or 8<>k then
aa[k,3]:=1
else
aa[k,3]:=-1;
if k or 16<>k then
aa[k,4]:=1
else
aa[k,4]:=-1;
if k or 32<>k then
aa[k,5]:=1
else
aa[k,5]:=-1;
end;
readln(n);
for i:=1 to n do
readln(a[i],b[i],c[i],d[i],e[i]);
for i:=0 to 63 do
for j:=1 to n do
sum[i,j]:=a[j]*aa[i,1]+b[j]*aa[i,2]+c[j]*aa[i,3]+d[j]*aa[i,4]+e[j]*aa[i,5];
for i:=0 to 63 do
begin
max:=-maxlongint; maxx:=-maxlongint; maxi:=0; min:=maxlongint;
for j:=1 to n do
if sum[i,j]>max then
max:=sum[i,j];
for j:=1 to n do
if sum[i,j]<min then
if j<>maxi then
min:=sum[i,j];
if max-min>ans then
ans:=max-min;
end;
writeln(ans:0:2);
end.