#include <iostream>
#include <algorithm>
#include <cmath>
#include <iomanip>
using namespace std;
struct point{
double x;
double y;
};
bool compare(const point& a, const point& b) {
return a.x < b.x;
}
void print(point arr[], int size) {
for(int i = 0; i < size; i++) {
cout << fixed << showpoint << setprecision(4)
<< arr[i].x << ' ' << arr[i].y << endl;
}
}
void calculate(point arr[], int size) {
if(size == 1) {
print(arr, size);
return;
}
point tmp[size-1];
for(int i = 0; i < size - 1; i++) {
double distance = sqrt(pow(arr[i].x - arr[i+1].x, 2) + pow(arr[i].y - arr[i+1].y, 2));
double angle1 = acos(distance/4);
double angle2 = atan((arr[i+1].y - arr[i].y) / (arr[i+1].x - arr[i].x));
double angle = angle1 + angle2;
tmp[i].x = arr[i].x + 2 * cos(angle);
tmp[i].y = arr[i].y + 2 * sin(angle);
}
calculate(tmp, size-1);
}
int main() {
int n;
while(cin >> n && n != 0){
point bottom[n];
for(int i = 0; i < n; i++) {
cin >> bottom[i].x;
bottom[i].y = 1;
}
sort(bottom, bottom+n, compare);
calculate(bottom, n);
}
return 0;
}
1012. Stacking Cylinders
最新推荐文章于 2017-06-30 18:47:00 发布