# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
9052 | 2014-09-27T11:02:27 Z | dolpang2 | Wall construction (kriii2_WA) | C++14 | 0 ms | 0 KB |
#include <cstdio> #include <cmath> #include <vector> struct Point { int x; int y; }; int main() { std::vector<Point> bundle; int N; int R; scanf(" %d %d", &N, &R); for (int i = 0; i < N; ++i) { int x; int y; scanf(" %d %d", &x, &y); Point p; p.x = x; p.y = y; bundle.push_back(p); } if (N == 2) { double dis = sqrt((bundle[0].x - bundle[1].x) * (bundle[0].x - bundle[1].x) + (bundle[0].y - bundle[1].y) * (bundle[0].y - bundle[1].y)); printf("%lf", 2 * dis + 2 * 3.14159265359 * R); } else { // 1사분면 Point one = bundle[0]; Point two = bundle[0]; Point three = bundle[0]; Point four = bundle[0]; for (int i = 0; i < N; ++i) { if (bundle[i].x > one.x || bundle[i].y > one.y) { one = bundle[i]; }if (bundle[i].x < two.x || bundle[i].y > two.y) { two = bundle[i]; } if (bundle[i].x < three.x || bundle[i].y < three.y) { three = bundle[i]; } if (bundle[i].x > four.x || bundle[i].y < four.y) { four = bundle[i]; } } long double dis = sqrt(long double((one.x - two.x) * (one.x - two.x) + (one.y - two.y) * (one.y - two.y))); dis += sqrt(long double((three.x - two.x) * (three.x - two.x) + (three.y - two.y) * (three.y - two.y))); dis += sqrt(long double((three.x - four.x) * (three.x - four.x) + (three.y - four.y) * (three.y - four.y))); dis += sqrt(long double((one.x - four.x) * (one.x - four.x) + (one.y - four.y) * (one.y - four.y))); printf("%.12Lf", dis + 2 * 3.14159265359 * R); } }