UVa 10012 How Big Is It? (枚举&细节)

原创 2013年12月05日 22:55:38

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=953


思路:

最多8个球,直接枚举。

注意:

1. 


由于一个圆不一定与圆心横坐标与其横坐标最接近的圆相切,所以判断一个圆圆心横坐标的实际位置要一一比较在它左边的每个圆,取最大值。

2. 由于圆心横坐标在最右边的圆不一定与箱子最右端接触(如上图,我们的算法是保证每个圆的实际圆心横坐标尽量小,即往左边靠),所以箱子长度=max{圆实际圆心横坐标+圆的半径}


完整代码:

/*0.098s*/

#include<bits/stdc++.h>
using namespace std;

double a[10], r[10];

///计算圆心的实际横坐标
inline void calc(int id)
{
	double x;
	for (int i = 0; i < id; ++i)
	{
		x = sqrt((a[i] + a[id]) * (a[i] + a[id]) - (a[i] - a[id]) * (a[i] - a[id])) + r[i];
		r[id] = max(r[id], x);
	}
}

int main()
{
	int T, n, i;
	double ans, tmp;
	scanf("%d", &T);
	while (T--)
	{
		scanf("%d", &n);
		for (i = 0; i < n; ++i) scanf("%lf", &a[i]);
		sort(a, a + n);
		ans = 1e100;
		do
		{
			memcpy(r, a, sizeof(a));
			for (i = 1; i < n; ++i) calc(i);///计算圆心的实际横坐标
			tmp = 0.0;
			for (i = 0; i < n; ++i) tmp = max(tmp, r[i] + a[i]);///这么算是因为不一定最右边那个就靠在箱子右侧
			ans = min(ans, tmp);
		}
		while (next_permutation(a, a + n));
		printf("%.3f\n", ans);
	}
	return 0;
}

uva 10012 How Big Is It?(枚举)

uva 10012 How Big Is It? Ian's going to California, and he has to pack his things, including hi...
  • llx523113241
  • llx523113241
  • 2015年02月03日 17:16
  • 388

UVA - 10012 - How Big Is It? (枚举)

思路:刚开始以为直接全排列枚举一下就好了,结果WA了。没想到没这么简单,重新排列后还要判断当前情况是否能够成立(这时可能会有相交的)。比如现在有两个大圆中间围着几个很小很小的圆,肯定是两个大圆先相切,...
  • u014355480
  • u014355480
  • 2015年03月24日 19:48
  • 663

uva 10012 How Big Is It?

此题大意:给定一定数量的圆,然后将其装在箱子里,求箱子最小的宽度 要求是:每个圆都必须与底部接触,同时每个圆必须与至少一个院邻接(这在程序中体现为相切) 。  注意点:就是打球非常大,而小...
  • lovejava123qqq
  • lovejava123qqq
  • 2015年08月09日 00:04
  • 172

uva 10012 - How Big Is It?

Ian's going to California, and he has to pack his things, including his collection of circles. Given...
  • zz_FreeSky
  • zz_FreeSky
  • 2014年10月24日 21:34
  • 321

uva 10012 How Big Is It?

题目地址: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=108&page=show_pr...
  • hackerwin7
  • hackerwin7
  • 2013年11月14日 16:13
  • 793

uva 10012 How Big Is It?

点击打开链接 (这个链接到BNUOJ上面是一样的) 题目意思:  给定m个圆的半径,现在要求找到一个矩形使得每一个球都以地面相切,要求输出最小的矩阵的长度 解题思路:  最小的圆排列问题,对于...
  • cgl1079743846
  • cgl1079743846
  • 2012年07月17日 11:54
  • 771

UVA 10012 How Big Is It?

UVA-10012题意:给出一堆圆的半径,求要用多长的矩形能把框住。 解题思路:枚举球的排列顺序(next_permutation大法好),然后判断球的圆心的位置应该在哪里。temp[x]表示圆心的...
  • QzNarsh
  • QzNarsh
  • 2016年07月27日 21:01
  • 143

UVa 10012 - How Big Is It?

以为很简单,十分钟敲了一个全排列回溯,结果WA了。想了半天,才想到可能存在两个半径很大的圆相切,中间夹着很多小的圆(这样单纯的全排列只判断相邻两圆的话就可能出现圆圆相交的情况),这样就需要加一个圆心坐...
  • GooMaple
  • GooMaple
  • 2012年09月12日 18:26
  • 1019

uva 10012 how big is it?

wa了好几次,半径可能差距很大,小的园可能包含在两个大园之间,只需标记一线每个圆心的坐标...
  • count24
  • count24
  • 2011年10月29日 20:20
  • 235

UVA 10012 How Big Is It?

点击打开链接 一定要注意边界的问题,第二个及以后的圆不一定是与它相邻的圆相切的,右边界也是。 #include #include #include #include #include #inclu...
  • jtjy568805874
  • jtjy568805874
  • 2015年02月17日 15:18
  • 207
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVa 10012 How Big Is It? (枚举&细节)
举报原因:
原因补充:

(最多只允许输入30个字)