POJ 1169
#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的更多相关文章
- POJ 题目分类(转载)
Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...
- (转)POJ题目分类
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. ...
- poj分类
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. ( ...
- poj 题目分类(1)
poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...
- POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)
本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...
- POJ题目分类(转)
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- POJ题目(转)
http://www.cnblogs.com/kuangbin/archive/2011/07/29/2120667.html 初期:一.基本算法: (1)枚举. (poj1753,poj29 ...
- [POJ题目分类][转]
Hint:补补基础... 初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治 ...
随机推荐
- hdu-1058(动态规划)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058 题意:求只由2,3,5,7的乘积组成的数,输出格式见output 思路:开始想打表,后来打表超时 ...
- qmake -简介
qmake 简化了在不同平台下开发项目时构建处理的过程. qmake 自动产生Makefiles文件,只需要几行信息来构建每个Makefile.qmake可以被用于任何软件项目,不管是否使用Qt. q ...
- 13.A={1,2,3,5}和为10的问题
题目:集合A={1,2,3,5},从中任取几个数相加等于10,并打印各得哪几个数?补充参照:http://www.cnblogs.com/tinaluo/p/5294341.html上午弄明白了幂集的 ...
- springmvc elf8848
刚开始觉得孔浩讲得好,之后觉得开涛讲得好,现在觉得elf8848讲得好.其实只是自己学习的各个阶段 孔浩:环境搭建,做了个基础的CRUD 开涛:讲了Controller(不该看),注解,数据绑定,请求 ...
- 同一台服务器配置多个tomcat服务的方法
要在同一台服务器上配置多个tomcat服务,需要解决以下几个问题 (1) 不同的tomcat启动和关闭监听不同的端口 (2) 不同的tomcat的启动文件startup.sh 中要指定各自的CATAL ...
- wc.java
GitHub代码链接 1.项目相关要求 •基本功能列表: -c 统计文件中字符的个数 -w 统计文件中的词数 -l 统计文件中的行数 •拓展功能: -a 统计文件中代码行数.注释行数.空行 2 ...
- jquery使用ajax报错[Uncaught SyntaxError: Unexpected token :]
$.post('/ajax/validate.do',{"id": id},function(ret){ //ret }); 返回值明明是json,格式也是正确的,却解析不成功,在 ...
- Java核心编程快速学习(转载)
http://www.cnblogs.com/wanliwang01/p/java_core.html Java核心编程部分的基础学习内容就不一一介绍了,本文的重点是JAVA中相对复杂的一些概念,主体 ...
- Python学习-33.Python中glob模块的一些参数
glob模块中有一个叫glob的方法可以获取某个目录下的文件. import glob temp=glob.glob("E:\\Temp\\*.txt") print(temp) ...
- 射线与平面的相交检测(Ray-Plane intersection test)【转】
射线的定义 在欧几里德几何中,射线的定义是:直线上一点和它一旁的部分.由此可知,射线有两个性质,一是只有一个端点,二是一端无限延伸. 射线的参数方程 其中p0是射线的起点, u是射线的方向向量,t & ...