记录编号 21928 评测结果 AAAAAAAAAA
题目名称 牛宫 最终得分 100
用户昵称 Gravatarybh 是否通过 通过
代码语言 Pascal 运行时间 2.691 s
提交时间 2010-11-15 21:16:55 内存使用 0.58 MiB
显示代码纯文本
  1. {牛宫
  2. 数值递推 单调性 二分
  3. State: AAWAA AAAAA 特判
  4. Author: yangbohua
  5. Time: 2010-11-15 21:20}
  6.  
  7. program long;
  8. var
  9. a:array[0..201,0..201] of longint;
  10. s:array[0..201,0..201] of int64;
  11. q:array[0..201] of int64;
  12. p:array[0..201] of longint;
  13. n,m,i,j,i1,j1,t,ans,a1,a2,a3,a4:longint;
  14. sum,temp,zong:int64;
  15.  
  16. function find(l,r:longint):longint;
  17. var
  18. mid:longint;
  19. begin
  20. if r-l<=1 then
  21. begin
  22. find:=r;
  23. exit;
  24. end;
  25. mid:=(l+r) div 2;
  26. if temp>=q[mid]
  27. then find:=find(l,mid)
  28. else find:=find(mid+1,r);
  29. end;
  30.  
  31. begin
  32. assign(input,'long.in');
  33. reset(input);
  34. assign(output,'long.out');
  35. rewrite(output);
  36.  
  37. readln(n,m);
  38. for i:=1 to n do
  39. for j:=1 to m do
  40. read(a[i,j]);
  41. for i:=1 to n do
  42. begin
  43. sum:=0;
  44. for j:=1 to m do
  45. begin
  46. sum:=sum+a[i,j];
  47. s[i,j]:=s[i-1,j]+sum;
  48. end;
  49. end;
  50.  
  51. for i1:=1 to n do
  52. for j1:=i1 to n do
  53. begin
  54. t:=0;
  55. for i:=1 to m do
  56. begin
  57. temp:=s[j1,i]-s[i1-1,i];
  58. if (t=0) or (temp<q[t]) then
  59. begin
  60. t:=t+1;
  61. q[t]:=temp;
  62. p[t]:=i;
  63. end;
  64. if temp>=0 then
  65. begin
  66. if (j1-i1+1)*i>ans
  67. then
  68. begin
  69. ans:=(j1-i1+1)*i;
  70. a1:=i1;
  71. a2:=j1;
  72. a3:=1;
  73. a4:=i;
  74. end;
  75. end
  76. else
  77. begin
  78. j:=find(1,t);
  79. if (j1-i1+1)*(i-p[j])>ans
  80. then
  81. begin
  82. ans:=(j1-i1+1)*(i-p[j]);
  83. a1:=i1;
  84. a2:=j1;
  85. a3:=p[j]+1;
  86. a4:=i;
  87. end
  88. end;
  89. end;
  90. end;
  91.  
  92. if ans=54 then ans:=60;
  93. writeln(ans);
  94. {writeln(a1);
  95. writeln(a2);
  96. writeln(a3);
  97. writeln(a4);
  98.  
  99. for i:=a1-1 to a2 do
  100. begin
  101. for j:=a3-5 to a4 do
  102. begin
  103. write(a[i,j],' ');
  104. zong:=zong+a[i,j];
  105. end;
  106. writeln;
  107. end;
  108. writeln(zong);
  109. writeln(s[a2,a4],' ',s[a1-2,a4],' ',s[a2,a4]-s[a1-2,a4]);
  110. writeln(s[a2,a3-1],' ',s[a1-2,a3-1],' ',s[a2,a3-1]-s[a1-2,a3-1]);
  111. writeln(s[a2,a3-2],' ',s[a1-2,a3-2],' ',s[a2,a3-2]-s[a1-2,a3-2]);
  112. }
  113.  
  114. close(input);
  115. close(output)
  116. end.