记录编号 113214 评测结果 AAAAAAAAAA
题目名称 [IOI 1999]矩形地块(A Strip of Land) 最终得分 100
用户昵称 Gravatarteacher 是否通过 通过
代码语言 Pascal 运行时间 1.966 s
提交时间 2014-07-19 23:02:39 内存使用 4.03 MiB
显示代码纯文本
  1. var
  2. c,q:byte;
  3. u,v,i,j,k,max,right,x:integer;
  4. ans:longint;
  5. di:array[-30000..30010] of integer;
  6. p,f,h,g:array[1..701,0..700] of integer;
  7. begin
  8. assign(input,'land.in'); reset(input);
  9. assign(output,'land.out'); rewrite(output);
  10. readln(u,v,c);
  11. for i:=1 to v do p[i,0]:=30001;
  12. for i:=1 to u do p[v+1,i]:=30001;
  13. c:=c+1;
  14. for i:=1 to v do for j:=1 to u do read(h[i,j]);
  15. for i:=0 to c-1 do di[i]:=0;
  16. for i:=-1 downto -30000 do di[i]:=di[i+c]-1;
  17. for i:=c to 30010 do di[i]:=di[i-c]+1;
  18. for q:=0 to c-1 do begin
  19. for i:=1 to v do for j:=1 to u do p[i,j]:=di[h[i,j]+q];
  20. for i:=1 to u do begin
  21. f[1,i]:=1;
  22. for j:=2 to v do
  23. if p[j,i]=p[j-1,i] then f[j,i]:=f[j-1,i]+1
  24. else f[j,i]:=1;
  25. end;
  26. for i:=1 to v do begin
  27. g[i,u]:=1;
  28. for j:=u-1 downto 1 do
  29. if p[i,j]=p[i,j+1] then begin g[i,j]:=g[i,j+1]+1; if g[i,j]>100 then g[i,j]:=100 end
  30. else g[i,j]:=1;
  31. end;
  32. for i:=1 to u do
  33. for j:=v downto 1 do begin
  34. if (p[j,i]=p[j+1,i]) and (g[j,i]<=g[j+1,i]) then continue;
  35. if (p[j,i]=p[j,i-1]) and (f[j,i]<=f[j,i-1]) then continue;
  36. max:=f[j,i];
  37. if f[j,i]>ans then ans:=f[j,i];
  38. if i=u then continue;
  39. right:=i+g[j,i]-1;
  40. for k:=i+1 to right do begin
  41. if f[j,k]<max then max:=f[j,k];
  42. if max*(k-i+1)>ans then ans:=max*(k-i+1);
  43. end;
  44. end;
  45. end;
  46. writeln(ans);
  47. close(input); close(output);
  48. end.