1206. Stacking Cylinders & 1012. Stacking Cylinders

TAG 简单几何计算

 

这两道题题目是一样的,不过输出格式有点不同,而且1206的Sample input故意设下陷阱:让人误以为输入数据有序。

我之前没有排序,wa了。(╬▔ ω▔)

 

圆形的位置不好处理,我们可以考虑圆心,变成三角形来分析。

题目说明只有相邻层会接触。所以问题变得比较简单,而且我们可以逐层计算上去,最终得到答案。

1206. Stacking Cylinders & 1012. Stacking Cylinders_第1张图片

连接相邻的2个圆心和对应上方的圆心,显然AC=AB=2,再算 θ1 和 θ2 两个角便能得出答案。C 和 B 的坐标在递推时已求出,显然 θ1 和 θ2很容易算。当然,这里画的三角形是“左倾”的,还有“右倾”的情况,所以注意算 θ1 的时候,在求边时不要用绝对值,这样 θ1 可正可负,最后直接和 θ2 相加即可。

三角函数、细节的处理看1206的代码

#include #include #include using namespace std; struct node { double x,y; bool operator<(const node &b)const { return x

 

你可能感兴趣的:(ACM题解)