Pku2926 Requirements

这道题看起来很难,其实只要发现其中的规律就很简单了。(这不是废话吗!!!!)

我们可以发现两组数的差其实每个对应的数前面的正负号相反。于是,我们就可以暴力枚举找到每个状态的最大值和最小值。它们的差值便是答案。

程序如下:

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.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值