#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
#define MAXN 1930
#define M_4 4
using namespace std; struct _node
{
int len;
int wide;
};
struct _node_ans
{
int len;
int wide;
int area;
}; int _max(int a,int b);
int _max(int a,int b,int c);
int _max(int a,int b,int c,int d);
int compare(const void * i,const void * j);
void fun_1(int index);
void fun_2(int index);
void fun_3(int index);
void fun_4(int index);
void fun_5(int index);
void fun_6(int index);
_node _m[M_4];
int _sub[M_4];
int compare1(const void * i,const void * j);
_node_ans _ans[MAXN];
void init();
int stack_p = ; int main()
{
//freopen("acm.acm","r",stdin);
int i;
int sum = ;
int temp;
for(i = ; i < M_4; ++ i)
{
cin>>_m[i].wide;
cin>>_m[i].len;
}
init();
do
{
fun_1(-);
fun_2(-);
fun_3(-);
fun_4(-);
fun_6(-);
}while(next_permutation(_sub,_sub+M_4));
qsort(_ans,stack_p,sizeof(_node_ans),compare);
temp = _ans[].area;
for(i = ; i < stack_p; ++ i)
{
if(_ans[i].area == temp)
{
if(_ans[i].len > _ans[i].wide)
{
iter_swap(&_ans[i].len,&_ans[i].wide);
}
++ sum;
}
else
break;
}
qsort(_ans,sum,sizeof(_node_ans),compare1);
cout<<temp<<endl;
for(i = ; i < sum; ++ i)
{
if(i == || (_ans[i].len != _ans[i-].len || _ans[i].wide != _ans[i-].wide))
cout<<_ans[i].len<<" "<<_ans[i].wide<<endl;
}
} int compare1(const void * i,const void * j)
{
return ((_node_ans *)i)->len - ((_node_ans *)j)->len;
} int compare(const void * i,const void * j)
{
return ((_node_ans *)i)->area - ((_node_ans *)j)->area;
} void init()
{
int i;
for(i = ; i < M_4; ++ i)
{
_sub[i] = i;
}
} void fun_1(int index)
{
++ index;
if(index == M_4)
{
_ans[stack_p].len = _m[_sub[]].len + _m[_sub[]].len + _m[_sub[]].len + _m[_sub[]].len;
_ans[stack_p].wide = _max(_m[_sub[]].wide,_m[_sub[]].wide,_m[_sub[]].wide,_m[_sub[]].wide);
_ans[stack_p].area = _ans[stack_p].len * _ans[stack_p].wide;
stack_p ++;
return;
}
fun_1(index);
iter_swap(&_m[_sub[index]].wide,&_m[_sub[index]].len);
fun_1(index);
iter_swap(&_m[_sub[index]].wide,&_m[_sub[index]].len);
} void fun_2(int index)
{
++ index;
if(index == M_4)
{
_ans[stack_p].len =_max(_m[_sub[]].len +_m[_sub[]].len + _m[_sub[]].len,_m[_sub[]].len);
_ans[stack_p].wide = _max(_m[_sub[]].wide,_m[_sub[]].wide,_m[_sub[]].wide) + _m[_sub[]].wide;
_ans[stack_p].area = _ans[stack_p].len * _ans[stack_p].wide;
stack_p ++;
return;
}
fun_2(index);
iter_swap(&_m[_sub[index]].len,&_m[_sub[index]].wide);
fun_2(index);
iter_swap(&_m[_sub[index]].len,&_m[_sub[index]].wide);
} void fun_3(int index)
{
++ index;
if(index == M_4)
{
_ans[stack_p].len = _m[_sub[]].len + _max(_m[_sub[]].len+_m[_sub[]].len ,_m[_sub[]].len );
_ans[stack_p].wide = _max(_m[_sub[]].wide,_max(_m[_sub[]].wide,_m[_sub[]].wide)+_m[_sub[]].wide);
_ans[stack_p].area = _ans[stack_p].len * _ans[stack_p].wide;
stack_p ++;
return;
}
fun_3(index);
iter_swap(&_m[_sub[index]].len,&_m[_sub[index]].wide);
fun_3(index);
iter_swap(&_m[_sub[index]].len,&_m[_sub[index]].wide);
} void fun_4(int index)
{
++ index;
if(index == M_4)
{
_ans[stack_p].len = _m[_sub[]].len + _m[_sub[]].len + _max(_m[_sub[]].len,_m[_sub[]].len);
_ans[stack_p].wide = _max(_m[_sub[]].wide,_m[_sub[]].wide,_m[_sub[]].wide + _m[_sub[]].wide);
_ans[stack_p].area = _ans[stack_p].len * _ans[stack_p].wide;
stack_p ++;
return;
}
fun_4(index);
iter_swap(&_m[_sub[index]].len,&_m[_sub[index]].wide);
fun_4(index);
iter_swap(&_m[_sub[index]].len,&_m[_sub[index]].wide);
} void fun_6(int index)
{
++ index;
if(index == M_4)
{
_ans[stack_p].len = _max(_m[_sub[]].len+_m[_sub[]].len,_m[_sub[]].len + _m[_sub[]].len,_m[_sub[]].len + _m[_sub[]].len);
_ans[stack_p].wide = _max(_m[_sub[]].wide+_m[_sub[]].wide,_m[_sub[]].wide+_m[_sub[]].wide,_m[_sub[]].wide+_m[_sub[]].wide);
_ans[stack_p].area = _ans[stack_p].len * _ans[stack_p].wide;
stack_p ++;
return;
}
fun_6(index);
iter_swap(&_m[_sub[index]].len,&_m[_sub[index]].wide);
fun_6(index);
iter_swap(&_m[_sub[index]].len,&_m[_sub[index]].wide);
} int _max(int a,int b)
{
if(a > b)
{
return a;
}
return b;
} int _max(int a,int b,int c)
{
a = _max(a,b);
a = _max(a,c);
return a;
} int _max(int a,int b,int c,int d)
{
return _max(a,_max(b,c,d));
} void fun_5(int index)
{
++ index;
if(index == M_4)
{
_ans[stack_p].len = _m[_sub[]].len + _m[_sub[]].len + _max(_m[_sub[]].len,_m[_sub[]].len);
_ans[stack_p].wide = _max(_m[_sub[]].wide,_m[_sub[]].wide,_m[_sub[]].wide + _m[_sub[]].wide);
_ans[stack_p].area = _ans[stack_p].len * _ans[stack_p].wide;
stack_p ++;
return;
}
fun_5(index);
iter_swap(&_m[_sub[index]].len,&_m[_sub[index]].wide);
fun_5(index);
iter_swap(&_m[_sub[index]].len,&_m[_sub[index]].wide);
}

关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。

技术网站地址: vmfor.com

POJ 1169的更多相关文章

  1. POJ 题目分类(转载)

    Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...

  2. (转)POJ题目分类

    初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推. ...

  3. poj分类

    初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      ( ...

  4. poj 题目分类(1)

    poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...

  5. POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)

    本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...

  6. POJ题目分类(转)

    初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推. ...

  7. POJ题目细究

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

  8. POJ题目(转)

    http://www.cnblogs.com/kuangbin/archive/2011/07/29/2120667.html 初期:一.基本算法:     (1)枚举. (poj1753,poj29 ...

  9. [POJ题目分类][转]

    Hint:补补基础... 初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治 ...

随机推荐

  1. hdu-1058(动态规划)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058 题意:求只由2,3,5,7的乘积组成的数,输出格式见output 思路:开始想打表,后来打表超时 ...

  2. qmake -简介

    qmake 简化了在不同平台下开发项目时构建处理的过程. qmake 自动产生Makefiles文件,只需要几行信息来构建每个Makefile.qmake可以被用于任何软件项目,不管是否使用Qt. q ...

  3. 13.A={1,2,3,5}和为10的问题

    题目:集合A={1,2,3,5},从中任取几个数相加等于10,并打印各得哪几个数?补充参照:http://www.cnblogs.com/tinaluo/p/5294341.html上午弄明白了幂集的 ...

  4. springmvc elf8848

    刚开始觉得孔浩讲得好,之后觉得开涛讲得好,现在觉得elf8848讲得好.其实只是自己学习的各个阶段 孔浩:环境搭建,做了个基础的CRUD 开涛:讲了Controller(不该看),注解,数据绑定,请求 ...

  5. 同一台服务器配置多个tomcat服务的方法

    要在同一台服务器上配置多个tomcat服务,需要解决以下几个问题 (1) 不同的tomcat启动和关闭监听不同的端口 (2) 不同的tomcat的启动文件startup.sh 中要指定各自的CATAL ...

  6. wc.java

    GitHub代码链接 1.项目相关要求 •基本功能列表: -c  统计文件中字符的个数 -w 统计文件中的词数 -l   统计文件中的行数 •拓展功能: -a  统计文件中代码行数.注释行数.空行 2 ...

  7. jquery使用ajax报错[Uncaught SyntaxError: Unexpected token :]

    $.post('/ajax/validate.do',{"id": id},function(ret){ //ret }); 返回值明明是json,格式也是正确的,却解析不成功,在 ...

  8. Java核心编程快速学习(转载)

    http://www.cnblogs.com/wanliwang01/p/java_core.html Java核心编程部分的基础学习内容就不一一介绍了,本文的重点是JAVA中相对复杂的一些概念,主体 ...

  9. Python学习-33.Python中glob模块的一些参数

    glob模块中有一个叫glob的方法可以获取某个目录下的文件. import glob temp=glob.glob("E:\\Temp\\*.txt") print(temp) ...

  10. 射线与平面的相交检测(Ray-Plane intersection test)【转】

    射线的定义 在欧几里德几何中,射线的定义是:直线上一点和它一旁的部分.由此可知,射线有两个性质,一是只有一个端点,二是一端无限延伸. 射线的参数方程 其中p0是射线的起点, u是射线的方向向量,t & ...