zoukankan      html  css  js  c++  java
  • 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 = 0;
    
    int main()
    {
        //freopen("acm.acm","r",stdin);
        int i;
        int sum = 0;
        int temp;
        for(i = 0; i < M_4; ++ i)
        {
            cin>>_m[i].wide;
            cin>>_m[i].len;
        }
        init();
        do
        {
            fun_1(-1);
            fun_2(-1);
            fun_3(-1);
            fun_4(-1);
            fun_6(-1);
        }while(next_permutation(_sub,_sub+M_4));
        qsort(_ans,stack_p,sizeof(_node_ans),compare);
        temp = _ans[0].area;
        for(i = 0; 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 = 0; i < sum; ++ i)
        {
            if(i == 0 || (_ans[i].len != _ans[i-1].len || _ans[i].wide != _ans[i-1].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 = 0; i < M_4; ++ i)
        {
            _sub[i] = i;
        }
    }
    
    void fun_1(int index)
    {
        ++ index;
        if(index == M_4)
        {
            _ans[stack_p].len = _m[_sub[0]].len + _m[_sub[1]].len + _m[_sub[2]].len + _m[_sub[3]].len;
            _ans[stack_p].wide = _max(_m[_sub[0]].wide,_m[_sub[1]].wide,_m[_sub[2]].wide,_m[_sub[3]].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[0]].len +_m[_sub[1]].len + _m[_sub[2]].len,_m[_sub[3]].len);
            _ans[stack_p].wide = _max(_m[_sub[0]].wide,_m[_sub[1]].wide,_m[_sub[2]].wide) + _m[_sub[3]].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[0]].len + _max(_m[_sub[1]].len+_m[_sub[2]].len ,_m[_sub[3]].len );
            _ans[stack_p].wide = _max(_m[_sub[0]].wide,_max(_m[_sub[1]].wide,_m[_sub[2]].wide)+_m[_sub[3]].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[0]].len + _m[_sub[1]].len + _max(_m[_sub[2]].len,_m[_sub[3]].len);
            _ans[stack_p].wide = _max(_m[_sub[0]].wide,_m[_sub[1]].wide,_m[_sub[2]].wide + _m[_sub[3]].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[0]].len+_m[_sub[3]].len,_m[_sub[1]].len + _m[_sub[2]].len,_m[_sub[0]].len + _m[_sub[2]].len);
            _ans[stack_p].wide = _max(_m[_sub[0]].wide+_m[_sub[1]].wide,_m[_sub[2]].wide+_m[_sub[3]].wide,_m[_sub[1]].wide+_m[_sub[3]].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[0]].len + _m[_sub[1]].len + _max(_m[_sub[2]].len,_m[_sub[3]].len);
            _ans[stack_p].wide = _max(_m[_sub[0]].wide,_m[_sub[1]].wide,_m[_sub[2]].wide + _m[_sub[3]].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

  • 相关阅读:
    jconsole远程连接监控tomcat
    Nginx监控配置
    Nginx安装+2tomcat配置
    Flexbox布局模式的理解
    Web性能优化:图片优化
    大公司里怎样开发和部署前端代码?
    原生js下拉刷新
    全国三级城市联动 js版
    js获取智能机浏览器版本信息
    JS年月日三级联动下拉框日期选择代码
  • 原文地址:https://www.cnblogs.com/gavinsp/p/4563315.html
Copyright © 2011-2022 走看看