sicily 1012.Stacking Cylinders

来源:互联网 发布:淘宝搞笑夸张好评 编辑:程序博客网 时间:2024/04/29 16:14

解题思路与1206一致

  

#include <iostream>#include <vector>#include <algorithm>#include <cmath>using namespace std;struct circle{    double x;    double y;};bool com(circle a,circle b){    return a.x < b.x;}int main(){    int n;    while(cin >> n && n != 0)    {        vector<circle> data(n * (n + 1) / 2);        for(int i = 0;i < n;i++)        {            cin >> data[i].x;            data[i].y = 1.0;        }                sort(data.begin(),data.begin() + n,com);        int count = n;        for(int i = n; i > 0;i--)        {            for(int j = 0;j < i - 1;j++)            {                double m1 = data[count - i + 1].x - data[count - i].x;                double m2 = data[count - i + 1].y - data[count - i].y;                double a1 = atan(m2 / m1);                double a2 = acos(sqrt(m1 * m1 + m2 * m2) / 2 / 2);                double a = a1 + a2;                data[count].x = data[count - i].x + 2 * cos(a);                data[count].y = data[count - i].y + 2 * sin(a);                count++;            }        }        cout.precision(4);        cout << fixed << data[data.size() - 1].x << " " << fixed <<data[data.size() - 1].y << endl;    }    return 0;}                               


原创粉丝点击