本来是USACO Training的1.4.1的,但是介于今早过了食物链想起了这道题实在是太怨念了,翻出自己写的AC程序居然有5KB!!

思路很简单,枚举,而且就图中的六种情况。但是第六种变化状况太多了,我自己根本就没写出来后来是看别人写的分四种情况Blah Blah...

可参考此篇中的分析:http://blog.sina.com.cn/s/blog_5c717d190100qgkr.html

  1. program packrec;
  2. var r,rw,rt:array[..,..] of integer;
  3. i,j,k,l,t,i1,j1,k1,l1:integer;
  4. ans,anscount:integer;
  5. ansx,ansy:array [..] of integer;
  6.  
  7. procedure swap(var a,b:integer);
  8. var t:integer;
  9. begin
  10. t:=a;a:=b;b:=t;
  11. end;
  12.  
  13. procedure panding(x,y:integer);
  14. begin
  15. if x*y<ans then
  16. begin
  17. ans:=x*y;
  18. anscount:=;
  19. ansx[anscount]:=x;
  20. ansy[anscount]:=y;
  21. exit;
  22. end;
  23. if x*y=ans then
  24. begin
  25. inc(anscount);
  26. ansx[anscount]:=x;
  27. ansy[anscount]:=y;
  28. end;
  29. end;
  30.  
  31. procedure work;
  32. var lx,ly,min,i,max:integer;
  33. begin
  34. {layout1}
  35. lx:=rw[,]+rw[,]+rw[,]+rw[,];
  36. ly:=;
  37. for i:= to do
  38. if rw[i,]>ly then ly:=rw[i,];
  39. panding(lx,ly);
  40. {layout2}
  41. lx:=rw[,]+rw[,]+rw[,];
  42. if rw[,]>lx then lx:=rw[,];
  43. max:=;
  44. for i:= to do
  45. if rw[i,]>max then max:=rw[i,];
  46. ly:=max+rw[,];
  47. panding(lx,ly);
  48. {layout3}
  49. lx:=rw[,]+rw[,];
  50. if rw[,]>lx then lx:=rw[,];
  51. lx:=lx+rw[,];
  52. ly:=rw[,]+rw[,];
  53. if rw[,]>rw[,] then ly:=rw[,]+rw[,];
  54. if rw[,]>ly then ly:=rw[,];
  55. panding(lx,ly);
  56. {layout4}
  57. if rw[,]>rw[,] then lx:=rw[,] else lx:=rw[,];
  58. lx:=lx+rw[,]+rw[,];
  59. ly:=rw[,];
  60. if rw[,]+rw[,]>ly then ly:=rw[,]+rw[,];
  61. if rw[,]>ly then ly:=rw[,];
  62. panding(lx,ly);
  63. {layout5}
  64. if rw[,]>rw[,] then lx:=rw[,] else lx:=rw[,];
  65. lx:=lx+rw[,]+rw[,];
  66. ly:=rw[,]+rw[,];
  67. if rw[,]>ly then ly:=rw[,];
  68. if rw[,]>ly then ly:=rw[,];
  69. panding(lx,ly);
  70. {layout6}
  71. {if (rw[1,1]+rw[3,1]>rw[2,1]+rw[4,1]) then
  72. lx:=rw[1,1]+rw[3,1]
  73. else
  74. lx:=rw[2,1]+rw[4,1];
  75. if rw[1,2]+rw[2,2]>rw[3,2]+rw[4,2] then
  76. ly:=rw[1,2]+rw[2,2]
  77. else
  78. ly:=rw[3,2]+rw[4,2];
  79. if (rw[3,2]>rw[1,2]) and (rw[1,1]<rw[2,1]) then ly:=rw[2,2]+rw[4,2];
  80. if (rw[1,1]>rw[2,1]) and (rw[3,2]>rw[2,2]) then ly:=rw[1,1]+rw[3,2];
  81. if (rw[1,1]>rw[2,1]) and (rw[3,2]>rw[)}
  82. if rw[,]+rw[,]>rw[,]+rw[,] then
  83. ly:=rw[,]+rw[,]
  84. else
  85. ly:=rw[,]+rw[,];
  86. if rw[,]>=rw[,]+rw[,] then
  87. begin
  88. lx:=rw[,];
  89. if rw[,]+rw[,]>lx then lx:=rw[,]+rw[,];
  90. if rw[,]+rw[,]>lx then lx:=rw[,]+rw[,];
  91. end;
  92. if (rw[,]>rw[,]) and (rw[,]>rw[,]+r[,]) then
  93. begin
  94. lx:=rw[,]+rw[,];
  95. if rw[,]+rw[,]>lx then lx:=rw[,]+rw[,];
  96. if rw[,]+rw[,]>lx then lx:=rw[,]+rw[,];
  97. end;
  98. if (rw[,]>rw[,]) and (rw[,]<rw[,]+rw[,]) then
  99. begin
  100. lx:=rw[,]+rw[,];
  101. if rw[,]+rw[,]>lx then lx:=rw[,]+rw[,];
  102. if rw[,]+rw[,]>lx then lx:=rw[,]+rw[,];
  103. end;
  104. if (rw[,]>=rw[,]+rw[,]) then
  105. begin
  106. lx:=rw[,];
  107. if rw[,]+rw[,]>lx then lx:=rw[,]+rw[,];
  108. if rw[,]+rw[,]>lx then lx:=rw[,]+rw[,];
  109. end;
  110. if rw[,]=rw[,] then
  111. begin
  112. lx:=rw[,]+rw[,];
  113. if rw[,]+rw[,]>lx then lx:=rw[,]+rw[,];
  114. end;
  115. panding(lx,ly);
  116. end;
  117.  
  118. begin
  119. assign(input,'packrec.in');reset(input);
  120. assign(output,'packrec.out');rewrite(output);
  121. ans:=;
  122. for i:= to do
  123. readln(r[i,],r[i,]);
  124. for i:= to do
  125. for j:= to do
  126. if (j<>i) then
  127. for k:= to do
  128. if (k<>i) and (k<>j) then
  129. for l:= to do
  130. if (l<>i) and (l<>j) and (l<>k) then
  131. begin
  132. rw[,]:=r[i,];rw[,]:=r[i,];
  133. rw[,]:=r[j,];rw[,]:=r[j,];
  134. rw[,]:=r[k,];rw[,]:=r[k,];
  135. rw[,]:=r[l,];rw[,]:=r[l,];
  136. rt:=rw;
  137. for i1:= to do
  138. for j1:= to do
  139. for k1:= to do
  140. for l1:= to do
  141. begin
  142. rw:=rt;
  143. if i1= then swap(rw[,],rw[,]);
  144. if j1= then swap(rw[,],rw[,]);
  145. if k1= then swap(rw[,],rw[,]);
  146. if l1= then swap(rw[,],rw[,]);
  147. work;
  148. end;
  149. end;
  150. writeln(ans);
  151. for i:= to anscount- do
  152. for j:=i+ to anscount do
  153. if ansx[i]<ansx[j] then
  154. begin
  155. swap(ansx[i],ansx[j]);
  156. swap(ansy[i],ansy[j]);
  157. end;
  158. for i:= to anscount do
  159. if (ansx[i]<>ansx[i-]) and (ansx[i]>=ansy[i]) then writeln(ansy[i],' ',ansx[i]);
  160. close(input);close(output);
  161. end.

packrec

通过日期是2013-11-08,也就是因为NOIP和学农撞日期旷课在家的那个周五0 0,简直是无法忘记那天有多么郁闷,备考的一天简直废在这题上面…⊙﹏⊙b

Section 1.4 Packing Rectangles的更多相关文章

  1. USACO 6.2 Packing Rectangles

    Packing RectanglesIOI 95 The six basic layouts of four rectangles Four rectangles are given. Find th ...

  2. USACO1.4.1 Packing Rectangles

    //毕竟我不是dd牛,USACO的题解也不可能一句话带过的…… 题目链接:http://cerberus.delos.com:790/usacoprob2?a=pWvHFwGsTb2&S=pa ...

  3. [vijos P1531] 食物链

    做出的第一道NOI题目?(噗,还是看题解才会的…按某篇解题说的,这题就比我年轻四岁…T T 做的第一道IOI题目是USACO上的Packing Rectangles...这题比我还老!)对我等弱渣来说 ...

  4. USACO chapter1

    几天时间就把USACO chapter1重新做了一遍,发现了自己以前许多的不足.蒽,现在的程序明显比以前干净很多,而且效率也提高了许多.继续努力吧,好好的提高自己.这一章主要还是基本功的训练,没多少的 ...

  5. pdf reference 格式具体说明

    1. PDF概要 1.1. 图像模型 PDF能以平台无关.高效率的方式描叙复杂的文字.图形.排版. PDF 用图像模型来实现设备无关. 图像模型同意应用程序以抽象对象描叙文字.图像.图标.而不是通过详 ...

  6. Determine overlapping rectangles

    https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...

  7. keil MDK error: L6236E: No section matches selector - no section 错误

    今天板子刚到,新建的第一个工程就报错了. .\Objects\cse.sct(7): error: L6236E: No section matches selector - no section t ...

  8. 【代码笔记】iOS-一个tableView,两个section

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  9. gcc/linux内核中likely、unlikely和__attribute__(section(""))属性

    查看linux内核源码,你会发现有很多if (likely(""))...及if (unlikely(""))...语句,这些语句其实是编译器的一种优化方式,具 ...

随机推荐

  1. iOS开发之总结

    NO.1 要孜孜不倦的学习有句话叫技多不压身,编程本来就是一个更新换代非常快的工作.每年都有新的技术出现,我认为要成为一个出色的程序员只掌握一门语言肯定是不行的.那么,要怎么选择自己的第二门,甚至第三 ...

  2. javascript 键盘事件总结

    原文:http://www.cnblogs.com/rubylouvre/archive/2009/08/20/1550526.html#2583814 在进入正题前,我们看一下浏览器对于键盘的一些默 ...

  3. java获取客户访问IP

    原文:http://blog.csdn.net/mydwr/article/details/9357187 /** * 获取访问者IP * * 在一般情况下使用Request.getRemoteAdd ...

  4. JAVA学习提高之----安装多个JDK版本的问题

    我的机器上最开始安装的是jdk1.6,后来因为工作需要又安装了jdk1.4.但是,环境变量我并未更改,还是指向jdk1.6的路径的.可是,在cmd窗口输入 Java -version 却得到是1.4. ...

  5. Windows 上远程访问 Unix 的 XWindow / XManager / X

    准备 下载 putty  - http://www.putty.org/ 安装 cygwin - http://cygwin.com/, 并添加 e.g. c:/cygwin/bin 到 Window ...

  6. commonJS — 自定义事件处理(for CustomEvent)

    for CustomEvent github: https://github.com/laixiangran/commonJS/blob/master/src/forCustomEvent.js 代码 ...

  7. vb 和vb.net的区别

    vb 和vb.net的区别 源地址:http://blog.csdn.net/xjc1278003262/article/details/8805324 在随着VB.NET的 发展,大部分人都放弃使用 ...

  8. python 练习 22

    Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false. Python 编程中 if 语句用于控制程序的执行,基本形式为: if 判断条件: 执行语句…… el ...

  9. mvc json post执行顺序

    function GetFlightNo() {        var falg = false; var value = $("#No").val();        $.pos ...

  10. 164. Maximum Gap *HARD* -- 无序数组找出排序后连续元素的最大间隔

    Given an unsorted array, find the maximum difference between the successive elements in its sorted f ...