sicily 1206. Stacking Cylinders

原创 2015年11月18日 17:09:26

1206. Stacking Cylinders

Constraints

Time Limit: 1 secs, Memory Limit: 32 MB

Description

Problem Cylinders (e.g. oil drums) (of radius 1 foot) are stacked in a rectangular bin. Each cylinder on an upper row rests on two cylinders in the row below. The cylinders in the bottom row rest on the floor and do not roll from their original positions. Each row has one less cylinder than the row below.

 

This problem is to write a program to compute the location of the center of the top cylinder from the centers of the cylinders on the bottom row. Computations of intermediate values should use double precision.

Input

The input begins with a line containing the count of problem instances, nProb , as a decimal integer, (1<=nProb<=1000) . This is followed by nProb input lines. An input line consists of the number, n , of cylinders on the b

ottom row followed by n floating point values giving the x coordinates of the centers of the cylinders (the y coordinates are all 1.0 since the cylinders are resting on the floor (y = 0.0 )). The value of n will be between 1 and 10 (inclusive). The distance between adjacent centers will be at least 2.0 (so the cylinders do not overlap) and at most 3.4 (so cylinders at level k cannot touch cylinders at level k - 2 ).

Output

The output for each data set is a line containing the problem number (1...nProb) , a colon, a space, the x coordinate of the topmost cylinder to 4 decimal places, a space and the y coordinate of the topmost cylinder to 4 decimal places (both x and y ROUNDED to the nearest digit).

Note: To help you check your work, the x -coordinate of the center of the top cylinder should be the average of the x -coordinates of the leftmost and rightmost bottom cylinders.

Sample Input

5 
4 1.0 4.4 7.8 11.2 
1 1.0 
6 1.0 3.0 5.0 7.0 9.0 11.0 
10 1.0 3.0 5.0 7.0 9.0 11.0 13.0 15.0 17.0 20.4 
5 1.0 4.4 7.8 11.2 14.6

Sample Output

1: 6.1000 4.1607 
2: 1.0000 1.0000 
3: 6.0000 9.6603 
4: 10.7000 15.9100 
5: 7.8000 5.2143
 


#include<iostream>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;


void solve(double x1, double y1, double x2, double y2, double &x3, double &y3) {
	double ab = x2 - x1;
	double bc = abs(y2 - y1);
	double ac = sqrt(ab * ab + bc * bc);
	double ad = ac / 2.0;
	double df = sqrt(2.0 * 2.0 - ad * ad);
	double ef = ab * df / ac;
	double de = sqrt(df * df - ef *ef);

	// 判断左边定点靠下还是右边定点靠下
	double lower = y1 > y2 ? y2 : y1;
	y3 = lower + bc / 2.0 + ef;

	// 根据三角形朝向不同,用不同的方式解x

	// 上图左边情况
	if (lower == y1) x3 = ab / 2.0 + x1 - de;
	// 右边情况
	else x3 = ab / 2.0 + x1 + de;
}

int main() {
	int t;
	cin >> t;
	int n = 0;
	while (t--) {
		n++;
		int num;
		cin >> num;
		double x[10], y[10];
		for (int i = 0; i < num; i++) {
			cin >> x[i];
			y[i] = 1.00;
		}
		sort(x, x + num);
		for (int i = num - 1; i >= 1; i--) {
			for (int j = 0; j < i; j++) {
				solve(x[j], y[j], x[j + 1], y[j + 1], x[j], y[j]);
			}
		}
		cout << n << ": " << setprecision(4) << fixed << x[0] << " " << y[0] << endl;
	}
	return 0;
}


sicily 1206. Stacking Cylinders

解题思路:(学习了别人的方法,原文地址http://hi.baidu.com/watermoon_littlegui/blog/item/ce42cfecd2c20edcb21cb1d6.html):...
  • chocolate_22
  • chocolate_22
  • 2011年05月21日 19:00
  • 1207

1206. Stacking Cylinders

#include #include #include #include using namespace std; struct point{ double x; double y; }...
  • Er_mu
  • Er_mu
  • 2014年10月27日 17:37
  • 253

1206. Stacking Cylinders & 1012. Stacking Cylinders

TAG 简单几何计算 这两道题题目是一样的,不过输出格式有点不同,而且1206的Sample input故意设下陷阱:让人误以为输入数据有序。我之前没有排序,wa了。(╬▔ ω▔) 圆形的位置不好处理...
  • Dinosoft
  • Dinosoft
  • 2010年08月28日 10:04
  • 2287

Sicily 1206 Stacking Cylinders

由下面两个圆圆心的坐标求上面那个圆的坐标,如图,由(x1, y1)(x2, y2)求(x3, y3) 别被输入示例骗了,有乱序的情况。 #include #include #inc...
  • wbchou
  • wbchou
  • 2013年02月20日 21:28
  • 259

[sicily online]1012. Stacking Cylinders

Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description Cylinders (e.g. oil drums) (of ra...
  • qiuchenl
  • qiuchenl
  • 2012年12月05日 16:16
  • 507

sicily 1012/1206 Stacking Cylinders

1206. Stacking Cylinders Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description ...
  • yuhao199555
  • yuhao199555
  • 2015年06月02日 14:02
  • 683

1206. Stacking Cylinders(几何题,求相切球的球心)

/*1206. Stacking Cylinders(几何题,求相切球的球心) */ #include #include #include #include #include using ...
  • xiehaoyun2012
  • xiehaoyun2012
  • 2013年01月02日 20:03
  • 189

3446: Stacking Cylinders

3446: Stacking Cylinders   Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte Tot...
  • u013780740
  • u013780740
  • 2014年04月20日 20:40
  • 332

Stacking Cylinders(poj2194)

Stacking Cylinders Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1188...
  • CRZbulabula
  • CRZbulabula
  • 2016年08月14日 22:09
  • 178

1012 Stacking Cylinders

#include #include #include #include using namespace std; int main() { int n; double arr[12]...
  • u013147914
  • u013147914
  • 2013年12月29日 12:43
  • 287
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sicily 1206. Stacking Cylinders
举报原因:
原因补充:

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