【CYH-02】NOIp考砸后虐题赛:坐标:题解

代码:

这道题也并不难,用排序+简单动规即可。因为@Kevin_Wa 大佬放的是c++,所以我来一发Pascal。

var min,max,i,a1,b1,c1,d1,n:longint;
a,b,c,d:array[0..500000] of int64;
procedure sort(l,r: longint);
var i,j,x,y,y1,y2,y3:longint;
begin
i:=l;j:=r;x:=a[(l+r) div 2];y1:=b[(l+r) div 2];
y2:=c[(l+r) div 2];y3:=d[(l+r) div 2];
repeat
 while (a[i]<x)or((a[i]=x)and(b[i]<y1))or((a[i]=x)and(b[i]=y1)and(c[i]<y2))
 or((a[i]=x)and(b[i]=y1)and(c[i]=y2)and(d[i]<y3))  do inc(i);
 while (x<a[j])or((x=a[j])and(y1<b[j]))or((x=a[j])and(y1=b[j])and(y2<c[j]))
 or((x=a[j])and(y1=b[j])and(y2=c[j])and(y3<d[j]))  do dec(j);
 if not(i>j) then
   begin
   y:=a[i];a[i]:=a[j];a[j]:=y;
   y:=b[i];b[i]:=b[j];b[j]:=y;
   y:=c[i];c[i]:=c[j];c[j]:=y;
   y:=d[i];d[i]:=d[j];d[j]:=y;
   inc(i);j:=j-1;
   end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end;
begin
readln(n);
for i:=1 to n do
  begin
  read(a1,b1,c1,d1);
  a[i]:=b1-a1;b[i]:=c1-a1;c[i]:=d1-a1;
  d[i]:=i;
  end;
sort(1,n);
min:=maxlongint;
max:=-maxlongint;
for i:=2 to n do
  if (a[i]=a[i-1])and(b[i]=b[i-1])and(c[i]=c[i-1]) then
    begin
    if (d[i]-d[i-1]<min) then min:=d[i]-d[i-1];
    if (d[i]+d[i-1]>max) then max:=d[i]+d[i-1];
    end;
writeln(min,' ',max);
close(input);close(output);
end.

全部评论

相关推荐

HR_丸山彩同学:你的项目描述里,系统设计讲了很多:MemCube是什么、三级存储架构怎么设计、四种遗忘策略分别是什么。这些面试的时候讲没问题,但简历上不需要这么细。 简历要突出的是影响力,不是实现细节。面试官看简历的时候想知道的是「这个项目有多大价值」,不是「这个项目具体怎么实现的」。实现细节是面试时候聊的 怎么改:技术细节可以精简为一句「采用三级存储架构+四种遗忘策略」,把省出来的篇幅用来写影响力。比如:项目有没有开源?有没有写成技术博客?有没有被别人使用过? 校园经历没有任何信息量,任何人都可以写这句话,写了等于没写。更关键的是,你投的是技术岗,校园活动经历本来就不是加分项。如果非要写,必须写出具体的数字和成果。如果你没有这些数字,那就老老实实删掉 「端到端耗时缩减30-40%」要给出确切数字和绝对值。从1000ms降到600ms是降了40%,从100ms降到60ms也是降了40%,但这两个含义完全不一样。其他也是,涉及到数据,准备好证据,口径统一,面试会问 「熟练」「熟悉」「了解」混在一起用,读起来很乱。而且「了解前端需求」最好改成「具备前后端协作经验」
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务