概述
题目
double判断相等以及大于小于 用1e-7才可以过
#define debug(x) cout<<#x<<": "<<(x)<<endl;
#define great(x,y) ( (x)-(y) ) > 1e-7
#define less(x,y) ( (x)-(y) ) < -1e-7
#define eq(x,y) abs( (x)-(y) ) <= 1e-7
#include <iostream>
#include <vector>
#include <math.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
#pragma warning(disable:4996)
#define debug(x) cout<<#x<<": "<<(x)<<endl;
#define great(x,y) ( (x)-(y) ) > 1e-7
#define less(x,y) ( (x)-(y) ) < -1e-7
#define eq(x,y) abs( (x)-(y) ) <= 1e-7
using ll = long long;
struct pos {
double x, y;
double r2;
double r;
double du;
};
bool solve(int cn) {
int n;
cin >> n;
vector<pos> arr(n);
double pi = 3.1415926;
arr.reserve(n);
for (int i = 0; i < n; ++i) {
cin >> arr[i].x;
cin >> arr[i].y;
arr[i].r2 = arr[i].x * arr[i].x + arr[i].y * arr[i].y;
arr[i].r = sqrtl(arr[i].r2);
double du = acos(arr[i].x / arr[i].r);
if (arr[i].y >= 0) {
arr[i].du = du;
}else{
arr[i].du = 2*pi - du;
}
}
auto cmp = [&](const pos& a, const pos& b) {
if( eq(a.du,b.du)){
return a.r2 > b.r2;
}else{
return less(a.du, b.du);
}
};
sort(arr.begin(),arr.end(),cmp);
cout << "case #" << cn << ":"<<endl;
for (auto i : arr) {
printf("(%.4lf,%.4lf)n", i.r, i.du);
}
return true;
}
int main() {
//freopen("../in1.txt","r",stdin);
int t;
cin >> t;
for (int i = 0; i < t; ++i) {
solve(i);
}
return 0;
}
最后
以上就是内向草莓为你收集整理的ecnu 3059. 极坐标排序的全部内容,希望文章能够帮你解决ecnu 3059. 极坐标排序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复