Codeforces_733D
3 seconds
256 megabytes
standard input
standard output
Kostya is a genial sculptor, he has an idea: to carve a marble sculpture in the shape of a sphere. Kostya has a friend Zahar who works at a career. Zahar knows about Kostya's idea and wants to present him a rectangular parallelepiped of marble from which he can carve the sphere.
Zahar has n stones which are rectangular parallelepipeds. The edges sizes of the i-th of them are ai, bi and ci. He can take no more than two stones and present them to Kostya.
If Zahar takes two stones, he should glue them together on one of the faces in order to get a new piece of rectangular parallelepiped of marble. Thus, it is possible to glue a pair of stones together if and only if two faces on which they are glued together match as rectangles. In such gluing it is allowed to rotate and flip the stones in any way.
Help Zahar choose such a present so that Kostya can carve a sphere of the maximum possible volume and present it to Zahar.
The first line contains the integer n (1 ≤ n ≤ 105).
n lines follow, in the i-th of which there are three integers ai, bi and ci (1 ≤ ai, bi, ci ≤ 109) — the lengths of edges of the i-th stone. Note, that two stones may have exactly the same sizes, but they still will be considered two different stones.
In the first line print k (1 ≤ k ≤ 2) the number of stones which Zahar has chosen. In the second line print k distinct integers from 1 to n — the numbers of stones which Zahar needs to choose. Consider that stones are numbered from 1 to n in the order as they are given in the input data.
You can print the stones in arbitrary order. If there are several answers print any of them.
6
5 5 5
3 2 4
1 4 1
2 1 3
3 2 4
3 3 4
1
1
7
10 7 8
5 10 3
4 2 6
5 5 5
10 2 8
4 2 1
7 7 7
2
1 5
In the first example we can connect the pairs of stones:
- 2 and 4, the size of the parallelepiped: 3 × 2 × 5, the radius of the inscribed sphere 1
- 2 and 5, the size of the parallelepiped: 3 × 2 × 8 or 6 × 2 × 4 or 3 × 4 × 4, the radius of the inscribed sphere 1, or 1, or 1.5 respectively.
- 2 and 6, the size of the parallelepiped: 3 × 5 × 4, the radius of the inscribed sphere 1.5
- 4 and 5, the size of the parallelepiped: 3 × 2 × 5, the radius of the inscribed sphere 1
- 5 and 6, the size of the parallelepiped: 3 × 4 × 5, the radius of the inscribed sphere 1.5
Or take only one stone:
- 1 the size of the parallelepiped: 5 × 5 × 5, the radius of the inscribed sphere 2.5
- 2 the size of the parallelepiped: 3 × 2 × 4, the radius of the inscribed sphere 1
- 3 the size of the parallelepiped: 1 × 4 × 1, the radius of the inscribed sphere 0.5
- 4 the size of the parallelepiped: 2 × 1 × 3, the radius of the inscribed sphere 0.5
- 5 the size of the parallelepiped: 3 × 2 × 4, the radius of the inscribed sphere 1
- 6 the size of the parallelepiped: 3 × 3 × 4, the radius of the inscribed sphere 1.5
It is most profitable to take only the first stone.
题意:给定n个长方体的长宽高,一次可以取一个,或者如果两个长方体有相同面,那么可以将这两个长方体通过相同面连接起来,最多可以连两个长方体。问要取的长方体的内接球的半径最大,应该取哪一个或者哪两个。
思路:先算出取一个能取的最大值,再算两个的。长方体内接球的半径受限于最短边,也就是说如果要将两个拼接起来,若不增加最短边,那么结果不可能大于取一个的最大值。接下来就暴力了。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<set>
using namespace std;
#define N 100005
#define INF 1e9+5
struct Node
{
int a,b,c,index;
} node[N]; bool cmp(Node x,Node y)
{
if(x.a>y.a)
return ;
else if(x.a==y.a)
{
if(x.b>y.b)
return ;
else if(x.b==y.b)
{
if(x.c>y.c)
return ;
else
return ;
}
else
return ;
}
else
return ;
} int getR(int a,int b,int c)
{
int minx=INF;
minx=min(minx,a);
minx=min(minx,b);
minx=min(minx,c);
return minx;
} int main()
{
int n;
scanf("%d",&n);
int num[];
for(int i=; i<n; i++)
{
scanf("%d%d%d",&num[],&num[],&num[]);
sort(num,num+);
node[i].a=num[];
node[i].b=num[];
node[i].c=num[];
node[i].index=i+;
}
sort(node,node+n,cmp);
int aa=-,bb=-,maxn=;
for(int i=; i<n; i++)
{
int tmp=getR(node[i].a,node[i].b,node[i].c);
if(tmp>maxn)
{
maxn=tmp;
aa=node[i].index;
}
}
for(int i=; i<n; i++)
{
if(node[i].a==node[i-].a&&node[i].b==node[i-].b)
{
int tmp=getR(node[i].a,node[i].b,node[i].c+node[i-].c);
if(tmp>maxn)
{
maxn=tmp;
aa=node[i].index;
bb=node[i-].index;
}
}
}
if(aa>&&bb>)
{
printf("2\n");
printf("%d %d\n",aa,bb);
}
else
{
printf("1\n");
printf("%d",aa);
}
return ;
}
Codeforces_733D的更多相关文章
随机推荐
- eclipse编译项目用maven编译问题
1.eclipse只是个ide开发环境,并没有编译器功能.没有编译器.eclipse编译项目只是调jdk本地的java编译器.maven是单独编译,eclipse可以调用maven编译, 在eclip ...
- ubuntu How do I configure proxies without GUI?
想法: 我的想法是想是一台国内的 ubuntu 云主机可以通过另外一台在国外(新加坡)的服务器 ,来实现可以访问 google ,哈哈,比较好查资料:) 下面的做法 去修改 /etc/environ ...
- cc2540 cc2541 开发板资料更新日志
经过多次PCB打样和全面调试.已经完毕了cc2540 cc2541的开发板的批量贴片.硬件告一段落, 接下来是全面完好软件方面的工作.眼下已经针对没有开发经验的用户编写完毕0基础基础实验代码和教程.接 ...
- Java基础:初始化和清理
转载请注明出处:jiq•钦's technical Blog (1) 初始化: 所以假设继承关系为:A导出B再导出C,在创建C对象的情况下的调用顺序是: * (1) A的静态域,B的静态域,C的静态域 ...
- LeetCode 171. Excel Sheet Column Number (Excel 表格列数字)
Related to question Excel Sheet Column Title Given a column title as appear in an Excel sheet, retur ...
- 深分页(Deep Pagination)
取回阶段 | Elasticsearch: 权威指南 | Elastic https://www.elastic.co/guide/cn/elasticsearch/guide/current/_fe ...
- JSP-Runoob:JSP 异常处理
ylbtech-JSP-Runoob:JSP 异常处理 1.返回顶部 1. JSP 异常处理 当编写JSP程序的时候,程序员可能会遗漏一些BUG,这些BUG可能会出现在程序的任何地方.JSP代码中通常 ...
- js获取request参数值(javascript 获取request参数值的方法)
jsp 中的js,可以用el表达式来提取:var value = "${requestScope.XXX}"; 注:XXX为你的参数名 如:http://localhost:808 ...
- androd基础入门---1环境
1.项目结构特性 2.模拟器设置 3.编译器的下载 直接点击运行即可
- H5 触摸事件
HTML5中新添加了很多事件,但是由于他们的兼容问题不是很理想,应用实战性不是太强,所以在这里基本省略,咱们只分享应用广泛兼容不错的事件,日后随着兼容情况提升以后再陆续添加分享.今天为大家介绍的事件主 ...