我是靠谱客的博主 内向草莓,最近开发中收集的这篇文章主要介绍ecnu 3059. 极坐标排序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目

在这里插入图片描述

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. 极坐标排序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部