Dasha decided to bake a big and tasty layer cake. In order to do that she went shopping and bought n rectangular cake layers. The length and the width of the i-th cake layer were ai and birespectively, while the height of each cake layer was equal to one.

From a cooking book Dasha learned that a cake must have a form of a rectangular parallelepiped constructed from cake layers of the same sizes.

Dasha decided to bake the biggest possible cake from the bought cake layers (possibly, using only some of them). It means that she wants the volume of the cake to be as big as possible. To reach this goal, Dasha can cut rectangular pieces out of the bought cake layers. She always cuts cake layers in such a way that cutting lines are parallel to the edges of that cake layer. Dasha isn't very good at geometry, so after cutting out a piece from the original cake layer, she throws away the remaining part of it. Also she can rotate a cake layer in the horizontal plane (swap its width and length).

Dasha wants her cake to be constructed as a stack of cake layers of the same sizes. Each layer of the resulting cake should be made out of only one cake layer (the original one or cut out from the original cake layer).

Help Dasha to calculate the maximum possible volume of the cake she can bake using given cake layers.

Input

The first line contains an integer n (1 ≤ n ≤ 4000) — the number of cake layers that Dasha can use.

Each of the following n lines contains two integer numbers ai and bi (1 ≤ ai, bi ≤ 106) — the length and the width of i-th cake layer respectively.

Output

The first line of the output should contain the maximum volume of cake that can be baked using given layers.

The second line of the output should contain the length and the width of the resulting cake. If there are many solutions with maximum possible volume, print any of them.

Examples

Input
5
5 12
1 1
4 6
6 4
4 6
Output
96
6 4
Input
2
100001 900000
900001 100000
Output
180000000000
900000 100000

Note

In the first example Dasha doesn't use the second cake layer. She cuts 4 × 6 rectangle from the first cake layer and she uses other cake layers as is.

In the second example Dasha cuts off slightly from the both cake layers.

题意:给出n层蛋糕,每一层的蛋糕的长和宽分别为为 l,和 w,高为 1 ,要你求出把这个蛋糕的每层的长和宽都切成一样的时候可以得到的最大的体积(每一层的蛋糕切完的时候多余的部分会舍去)(可以完全把一层蛋糕舍去) (可以把某一层的蛋糕旋转)。

思路:写这道题目的时候想了想怎么用贪心来切,没想到怎么去贪,后面看了题目给的时间,就想用暴力应该可以过,但是如果不作任何优化的话肯定会超时,后面想了想可不可以通过排序来

优化一下,但是一开始傻了一下,想当然的以为排序暴力的时间是n*n*  n*log2 n,比n*n*n还要大,就否认了这种方法,但实际上降为了n*(n+n*log2 n),以后做题不能这样了啊,引以为戒。

代码:

#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
struct st{
ll w,l;
}s[4040];
bool cmp(st a,st b){
return a.w<b.w;
}
ll wl[4040];
int main(){
ll n;
ll a,b;
ll i,j,k;
scanf("%lld",&n);
for(i=0;i<n;i++){
scanf("%lld%lld",&a,&b);
if(a>b){
s[i].l=a;
s[i].w=b;
}
else{
s[i].l=b;
s[i].w=a;
}
}
sort(s,s+n,cmp);
ll w,l;
ll w1,l1;
ll sum;
ll ans=0;
w=s[0].w-1;
for(i=0;i<n;i++){
if(w==s[i].w)
continue;
w=s[i].w;
for(k=0,j=i;j<n;j++,k++){//拿出宽度大于等于要切宽度的蛋糕层
wl[k]=s[j].l;
}
sort(wl,wl+k);//把他们的长从小到大排序
sum=0;
l=wl[0]-1;
for(j=0;j<k;j++){
if(l==wl[j])
continue;
l=wl[j];
sum=w*l*(k-j);//因为长度是递增的,所以枚举的长度中有k-j 层蛋糕满足条件
if(ans<sum){
ans=sum;
w1=w;
l1=l;
}
}
}
printf("%lld\n",ans);
printf("%lld %lld\n",l1,w1);
return 0;
}

  

CodeForces - 589B(暴力+排序)的更多相关文章

  1. CodeForces 589B Layer Cake (暴力)

    题意:给定 n 个矩形是a*b的,问你把每一块都分成一样的,然后全放一块,高度都是1,体积最大是多少. 析:这个题,当时并没有完全读懂题意,而且也不怎么会做,没想到就是一个暴力,先排序,先从大的开始选 ...

  2. CodeForces - 589B(暴力)

    题目链接:http://codeforces.com/problemset/problem/589/B 题目大意:告诉你n 个矩形,知道矩形的长度和宽度(长和宽可以互换),每个矩形的长度可以剪掉一部分 ...

  3. CodeForces 670D1 暴力或二分

    今天,开博客,,,激动,第一次啊 嗯,,先来发水题纪念一下 D1. Magic Powder - 1   This problem is given in two versions that diff ...

  4. Codeforces Round #439 (Div. 2) Problem E (Codeforces 869E) - 暴力 - 随机化 - 二维树状数组 - 差分

    Adieu l'ami. Koyomi is helping Oshino, an acquaintance of his, to take care of an open space around ...

  5. Codeforces Round #439 (Div. 2) Problem A (Codeforces 869A) - 暴力

    Rock... Paper! After Karen have found the deterministic winning (losing?) strategy for rock-paper-sc ...

  6. Codeforces Round #425 (Div. 2) Problem B Petya and Exam (Codeforces 832B) - 暴力

    It's hard times now. Today Petya needs to score 100 points on Informatics exam. The tasks seem easy ...

  7. Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem C (Codeforces 831C) - 暴力 - 二分法

    Polycarp watched TV-show where k jury members one by one rated a participant by adding him a certain ...

  8. codeforces 691F 暴力

    传送门:https://codeforces.com/contest/691/problem/F 题意:给你n个数和q次询问,每次询问问你有多少对ai,aj满足ai*aj>=q[i],注意 a* ...

  9. CodeForces 558E(计数排序+线段树优化)

    题意:一个长度为n的字符串(只包含26个小字母)有q次操作 对于每次操作 给一个区间 和k k为1把该区间的字符不降序排序 k为0把该区间的字符不升序排序 求q次操作后所得字符串 思路: 该题数据规模 ...

随机推荐

  1. centos7.5 修改网卡名称

    1.修改网卡配置文件中名称信息 vim /etc/sysconfig/network-scripts/ifcfg-ens33 将其中的名称为ens33的改为eth0 ,并将uuid删除以便后面克隆 2 ...

  2. Windows下静态库与动态库的创建与使用

    Windows下静态库与动态库的创建与使用 学习内容:本博客介绍了Windows下使用Visual C++ 6.0制作与使用静态库与动态库的方法. --------CONTENTS-------- 一 ...

  3. nodejs高并发大流量的设计实现,控制并发的三种方法

    nodejs高并发大流量的设计实现,控制并发的三种方法eventproxy.async.mapLimit.async.queue控制并发Node.js是建立在Google V8 JavaScript引 ...

  4. 简单的sql server->bs或cs数据交互模式

    主要记录工作当中遇到的一些问题和总结的一些经验 客户端请求-->web服务接口-->sql 语句执行(存储在数据库中)-->web服务(客户端通过调用web服务接口)-->返回 ...

  5. SliverList , SliverFixedExtentList

    SliverList 高度自动, SliverFixedExtentList 高度固定死. CustomScrollView( slivers:[ SliverList( delegate: Sliv ...

  6. Html Link 标签

    Html Link 标签 Link 是 HTML Head 内部标签 <html> <head> <!-- link标签:rel="shortcut icon& ...

  7. Python RabbitMQ消息队列

    python内的队列queue 线程 queue:不同线程交互,不能夸进程 进程 queue:只能用于父进程与子进程,或者同一父进程下的多个子进程,进行交互 注:不同的两个独立进程是不能交互的.   ...

  8. activiti5/6 系列之--Activiti 读取并转换BPMN2文件

    统一的BPMN标准,对工作流的流程定义采用BPMN统一格式.BPMN流程文件可以使用eclipse bpmn2插件开发比如eclipse bpmn2 modeler或者idea activiti插件. ...

  9. JavaScript 声明全局变量和局部变量

    JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍. 声明方式一: 使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量 ...

  10. ssh登录后很慢 卡住 树莓派

    ssh登录后很慢,ls命令都响应很慢.sftp也连接不上.结果发现是路由器的问题,重启一下路由器就好了