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)递归和分治 ...
随机推荐
- 【httpclient-4.3.1.jar】httpclient发送get、post请求以及携带数据上传文件
1.发送get.post携带参数以及post请求接受JSON数据: package cn.qlq.utils; import java.io.BufferedReader; import java.i ...
- python数据类型4
一浮点数 什么叫做浮点数:浮点数就相当于小数,但是浮点数不包括无限循环又不重复的小数. 小数分为 有限小数和无限小数 无限小数又分为 无限循环小数和无限不循环小数 而 浮点数就是有限小数和无限循环小数 ...
- 2018.10.17 NOIP模拟 发电机(概率dp)
传送门 考试空间开大了爆零不然只有30分爆栈? 话说这题真的坑1e7没法写dfsdfsdfs 其实很好推式子. 考虑每个点安一个发动机的概率,推一波式子做个等比数列求和什么的可以证明出来是严格的1si ...
- 2018.09.18 atcoder Best Representation(kmp)
传送门 思路简单不知为何调试了很久. 显然要么分成n个(所有字符相同),要么分成1个(原字符串无循环节),要么分成两个(有长度至少为2的循环节). 一开始以为可以直接hash搞定. 后来wa了几次之后 ...
- c语言学生信息管理系统-学习结构体
#include<stdio.h> #include<stdlib.h> //结构体可以存放的学生信息最大个数,不可变变量 ; //学生信息结构体数组,最多可以存放100个学生 ...
- Python 插件(add-in)基础知识
1) Python插件为何物 一个插件(add-in)就是一个客户化,比如嵌入到ArcGIS应用程序中的工具条上的一系列工具,这些工具作为ArcGIS标准程序的补充可以为客户完成特殊任务. ArcG ...
- MySQL的NO_BACKSLASH_ESCAPES
官方说明: https://dev.mysql.com/doc/refman/5.7/en/mysql-real-escape-string.html 相关资料: https://dev.mysql. ...
- MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案
第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...
- linux几种查看日志的方法
linux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档 ...
- Android 文件模式
在Android文件模式中,非常欣赏Android统一资源管理模式的思想: 分为系统应用APP(以包名为唯一标识) 和普通应用APP(以包名为唯一标识) 每个包名下有自己的 cache files d ...