sicily 1206. Stacking Cylinders
来源:互联网 发布:联通宽带网络怎么样 编辑:程序博客网 时间:2024/05/30 04:56
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
- sicily 1206.Stacking Cylinders
- sicily 1206. Stacking Cylinders
- Sicily.1012. Stacking Cylinders
- Sicily 1206 Stacking Cylinders
- sicily 1012.Stacking Cylinders
- [sicily online]1012. Stacking Cylinders
- sicily 1012/1206 Stacking Cylinders
- 1206. Stacking Cylinders & 1012. Stacking Cylinders
- 1206. Stacking Cylinders
- Sicily 1206. Stacking Cylinders | 使用STL的complex库实现简单几何
- 1012 Stacking Cylinders
- 1012 Stacking Cylinders
- 3446: Stacking Cylinders
- SOJ 1012 Stacking Cylinders
- 1012. Stacking Cylinders
- ZOJ 2403 Stacking Cylinders
- Stacking Cylinders(poj2194)
- java种基本数据类型的范围
- localStorage 使用
- 自编printf 函数
- acm参赛笔记
- WINDOWS7环境下android studio、NDK配置补充
- sicily 1206. Stacking Cylinders
- db
- 升级MAC OS X自带的SVN客户端
- [leetcode]Valid Sudoku
- FastDFS的配置、部署与API使用解读(4)FastDFS配置详解之Client配置
- 最新Android studio
- Linux下打开java控制面板、设置安全等级
- Number of Digit One
- jQuery Mobile在PC上调试时,chrome中无法显示or加载