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)递归和分治 ...
随机推荐
- bootstrap中让图片自适应不同的分辨率的方法
boostrap中加上这个样式class="img-responsive"图片就可以自适应,手机端同样适用 详细介绍请查看全文:https://cnblogs.com/qianzf ...
- 2018.06.29 NOIP模拟 区间(前缀和差量)
区间(interval.cpp) 时限:2000ms 空间限制:512MB [问题描述] 给出一个长度为 n 的序列 a[1]-a[n]. 给出 q 组询问,每组询问形如<x,y>< ...
- arduino 驱动电调
#include <TimerOne.h> #define PPMPIN 7 ; //0-9 ; void setup() { // put your setup code here, t ...
- How Many Tables HDOJ
How Many Tables Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- C# Timer类
C# 有三种不同的Timer类 1.Threading.Timer 2.Timer.Timer 3.Forms.Timer using System; using System.Collections ...
- Java中HTTP通信
Java自带的get.post请求: get请求方式: package com.java; import java.io.BufferedReader; import java.io.IOExcept ...
- Elasticsearch 在 windows 和 ubuntu 下详细安装过程
1. 前言 作为一名 .NET 平台开发者,选择开发框架时总会面临更多的局限性,不过对于搜索这种刚需服务来说,开源框架可供选择的余地还是比较大的.笔者之前用的是 Lucene.net ,现在深感其使用 ...
- 深入研究java.lang.Process类
一.概述 Process类是一个抽象类(所有的方法均是抽象的),封装了一个进程(即一个执行程序). Process 类提供了执行从进程输入.执行输出到进程.等待进程完成.检查进程的退出状态 ...
- PLSQL(PL/SQL)集成Team Foundation Server (TFS),实现数据库代码的版本管理
PL/SQL是面向Oralcle数据库的集成开发环境,是众多Oracle数据库开发人员的主要工具.由于PL/SQL(百度百科)不仅是一种SQL语言,更是一种过程编程语言,在项目实施过程中,会积累大量除 ...
- 通过css使用background-color为背景图添加遮罩效果
一个div同时设置background-color和background-image的话,color是处于img层下方的,无法实现遮罩效果,所以需要再创建一个div作为其子div,然后设置子div的背 ...