Language: C++

#include <bits/stdc++.h>

using namespace std;

typedef long double db;
struct cp
{
	complex<db> mycp;
	int ind;
	cp operator -(cp b)
	{
		return {mycp - b.mycp, -1};
	}
	db real()
	{
		return mycp.real();
	}
	db imag()
	{
		return mycp.imag();
	}
	bool operator ==(cp b)
	{
		return mycp == b.mycp;
	}
};
//typedef complex<db> cp;

db cross(cp a, cp b)
{
	return a.real() * b.imag() - a.imag() * b.real();
}

int main()
{
	int n;
	cin >> n;
	cout.precision(30);
	vector<cp> pts(n);	
	for (int i = 0; i < n; ++i)
	{
		db x, y;
		cin >> x >> y;
		pts[i].mycp.real(x);
		pts[i].mycp.imag(y);
		pts[i].ind = i;
	}
	cp mn = pts[0];
	for (cp x : pts)
		if (x.imag() < mn.imag() || x.imag() == mn.imag() && x.real() == mn.real())
			mn = x;
	pts.erase(find(pts.begin(), pts.end(), mn));
	sort(pts.begin(), pts.end(), [&](cp a, cp b)
			{
				db kek = cross(a - mn, b - mn);
				if (kek)
					return kek > 0;
				return abs(a - mn) < abs(b - mn);
			});
	vector<cp> st(1, mn);
	for (auto x : pts)
	{
		while (st.size() >= 2 && cross(st.back() - st[st.size() - 2], x - st.back()) < 0)
			st.pop_back();
		st.push_back(x);
	}
	vector<double> ans(n);
	//double M_PI = 3.14159265;
	for (int i = 0; i < st.size(); ++i)
	{
		int pr = i == 0 ? st.size() - 1 : i - 1;
		int nx = i + 1 == st.size() ? 0 : i + 1;
		ans[st[i].ind] = arg((st[nx] - st[i]).mycp / (st[i] - st[pr]).mycp) / M_PI / 2;
	}
	for (auto& x : ans)
		cout << x << '\n';
}


Compiler output:
a.cc: In lambda function:
a.cc:58:43: error: no matching function for call to 'abs(cp)'
   58 |                                 return abs(a - mn) < abs(b - mn);
      |                                        ~~~^~~~~~~~
In file included from /usr/include/c++/14/valarray:605,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:166,
                 from a.cc:1:
/usr/include/c++/14/bits/valarray_after.h:445:5: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_UnClos<std::_Abs, std::_ValArray, _Tp>, _Tp> std::abs(const valarray<_Tp>&)'
  445 |     _DEFINE_EXPR_UNARY_FUNCTION(abs, struct std::_Abs)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:445:5: note:   template argument deduction/substitution failed:
a.cc:58:43: note:   'cp' is not derived from 'const std::valarray<_Tp>'
   58 |                                 return abs(a - mn) < abs(b - mn);
      |                                        ~~~^~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:445:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_UnClos<std::_Abs, std::_Expr, _Dom>, typename _Dom::value_type> std::abs(const _Expr<_Dom1, typename _Dom1::value_type>&)'
  445 |     _DEFINE_EXPR_UNARY_FUNCTION(abs, struct std::_Abs)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:445:5: note:   template argument deduction/substitution failed:
a.cc:58:43: note:   'cp' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
   58 |                                 return abs(a - mn) < abs(b - mn);
      |                                        ~~~^~~~~~~~
In file included from /usr/include/c++/14/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:127:
/usr/include/c++/14/complex:892:5: note: candidate: 'template<class _Tp> _Tp std::abs(const complex<_Tp>&)'
  892 |     abs(const complex<_Tp>& __z) { return __complex_abs(__z.__rep()); }
      |     ^~~
/usr/include/c++/14/complex:892:5: note:   template argument deduction/substitution failed:
a.cc:58:43: note:   'cp' is not derived from 'const std::complex<_Tp>'
   58 |                                 return abs(a - mn) < abs(b - mn);
      |                                        ~~~^~~~~~~~
In file included from /usr/include/c++/14/cstdlib:79,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:42:
/usr/include/stdlib.h:980:12: note: candidate: 'int abs(int)'
  980 | extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
      |            ^~~
/usr/include/stdlib.h:980:21: note:   no known conversion for argument 1 from 'cp' to 'int'
  980 | extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
      |                 ~~~~^~~
In file included from /usr/include/c++/14/cstdlib:81:
/usr/include/c++/14/bits/std_abs.h:137:3: note: candidate: 'constexpr __float128 std::abs(__float128)'
  137 |   abs(__float128 __x)
      |   ^~~
/usr/include/c++/14/bits/std_abs.h:137:18: note:   no known conversion for argument 1 from 'cp' to '__float128'
  137 |   abs(__float128 __x)
      |       ~~~~~~~~~~~^~~
/usr/include/c++/14/bits/std_abs.h:85:3: note: candidate: 'constexpr __int128 std::abs(__int128)'
   85 |   abs(__GLIBCXX_TYPE_INT_N_0 __x) { return __x >= 0 ? __x : -__x; }
      |   ^~~
/usr/include/c++/14/bits/std_abs.h:85:30: note:   no known conversion for argument 1 from 'cp' to '__int128'
   85 |   abs(__GLIBCXX_TYPE_INT_N_0 __x) { return __x >= 0 ? __x : -__x; }
      |                              ^
/usr/include/c++/14/bits/std_abs.h:79:3: note: candidate: 'constexpr long double std::abs(long double)'
   79 |   abs(long double __x)
      |   ^~~
/usr/include/c++/14/bits/std_abs.h:79:19: note:   no known conversion for argument 1 from 'cp' to 'long double'
   79 |   abs(long double __x)
      |       ~~~~~~~~~~~~^~~
/usr/include/c++/14/bits/std_abs.h:75:3: note: candidate: 'constexpr float std::abs(float)'
   75 |   abs(float __x)
      |   ^~~
/usr/include/c++/14/bits/std_abs.h:75:13: note:   no known conversion for argument 1 from 'cp' to 'float'
   75 |   abs(float __x)
      |       ~~~~~~^~~
/usr/include/c++/14/bits/std_abs.h:71:3: note: candidate: 'constexpr double std::abs(double)'
   71 |   abs(double __x)
      |   ^~~
/usr/include/c++/14/bits/std_abs.h:71:14: note:   no known conversion for argument 1 from 'cp' to 'double'
   71 |   abs(double __x)
      |       ~~~~~~~^~~
/usr/include/c++/14/bits/std_abs.h:61:3: note: candidate: 'long long int std::abs(long long int)'
   61 |   abs(long long __x) { return __builtin_llabs (__x); }
      |   ^~~
/usr/include/c++/14/bits/std_abs.h:61:17: note:   no known conversion for argument 1 from 'cp' to 'long long int'
   61 |   abs(long long __x) { return __builtin_llabs (__x); }
      |       ~~~~~~~~~~^~~
/usr/include/c++/14/bits/std_abs.h:56:3: note: candidate: 'long int std::abs(long int)'
   56 |   abs(long __i) { return __builtin_labs(__i); }
      |   ^~~
/usr/include/c++/14/bits/std_abs.h:56:12: note:   no known conversion for argument 1 from 'cp' to 'long int'
   56 |   abs(long __i) { return __builtin_labs(__i); }
      |       ~~~~~^~~
a.cc:58:57: error: no matching function for call to 'abs(cp)'
   58 |                                 return abs(a - mn) < abs(b - mn);
      |                                                      ~~~^~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:445:5: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_UnClos<std::_Abs, std::_ValArray, _Tp>, _Tp> std::abs(const valarray<_Tp>&)'
  445 |     _DEFINE_EXPR_UNARY_FUNCTION(abs, struct std::_Abs)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:445:5: note:   template argument deduction/substitution failed:
a.cc:58:57: note:   'cp' is not derived from 'const std::valarray<_Tp>'
   58 |                                 return abs(a - mn) < abs(b - mn);
      |                                                      ~~~^~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:445:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_UnClos<std::_Abs, std::_Expr, _Dom>, typename _Dom::value_type> std::abs(const _Expr<_Dom1, typename _Dom1::value_type>&)'
  445 |     _DEFINE_EXPR_UNARY_FUNCTION(abs, struct std::_Abs)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:445:5: note:   template argument deduction/substitution failed:
a.cc:58:57: note:   'cp' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
   58 |                                 return abs(a - mn) < abs(b - mn);
      |                                                      ~~~^~~~~~~~
/usr/include/c++/14/complex:892:5: note: candidate: 'template<class _Tp> _Tp std::abs(const complex<_Tp>&)'
  892 |     abs(const complex<_Tp>& __z) { return __complex_abs(__z.__rep()); }
      |     ^~~
/usr/include/c++/14/complex:892:5: note:   template argument deduction/substitution failed:
a.cc:58:57: note:   'cp' is not derived from 'const std::complex<_Tp>'
   58 |                                 return abs(a - mn) < abs(b - mn);
      |                                                      ~~~^~~~~~~~
/usr/include/stdlib.h:980:12: note: candidate: 'int abs(int)'
  980 | extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
      |            ^~~
/usr/include/stdlib.h:980:21: note:   no known conversion for argument 1 from 'cp' to 'int'
  980 | extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
      |                 ~~~~^~~
/usr/include/c++/14/bits/std_abs.h:137:3: note: candidate: 'constexpr __float128 std::abs(__float128)'
  137 |   abs(__float128 __x)
      |   ^~~
/usr/include/c++/14/bits/std_abs.h:137:18: note:   no known conversion for argument 1 from 'cp' to '__float128'
  137 |   abs(__float128 __x)
      |       ~~~~~~~~~~~^~~
/usr/include/c++/14/bits/std_abs.h:85:3: note: candidate: 'constexpr __int128 std::abs(__int128)'
   85 |   abs(__GLIBCXX_TYPE_INT_N_0 __x) { return __x >= 0 ? __x : -__x; }
      |   ^~~
/usr/include/c++/14/bits/std_abs.h:85:30: note:   no known conversion for argument 1 from 'cp' to '__int128'
   85 |   abs(__GLIBCXX_TYPE_INT_N_0 __x) { return __x >= 0 ? __x : -__x; }
      |                              ^
/usr/include/c++/14/bits/std_abs.h:79:3: note: candidate: 'constexpr long double std::abs(long double)'
   79 |   abs(long double __x)
      |   ^~~
/usr/include/c++/14/bits/std_abs.h:79:19: note:   no known conversion for argument 1 from 'cp' to 'long double'
   79 |   abs(long double __x)
      |       ~~~~~~~~~~~~^~~
/usr/include/c++/14/bits/std_abs.h:75:3: note: candidate: 'constexpr float std::abs(float)'
   75 |   abs(float __x)
      |   ^~~
/usr/include/c++/14/bits/std_abs.h:75:13: note:   no known conversion for argument 1 from 'cp' to 'float'
   75 |   abs(float __x)
      |       ~~~~~~^~~
/usr/include/c++/14/bits/std_abs.h:71:3: note: candidate: 'constexpr double std::abs(double)'
   71 |   abs(double __x)
      |   ^~~
/usr/include/c++/14/bits/std_abs.h:71:14: note:   no known conversion for argument 1 from 'cp' to 'double'
   71 |   abs(double __x)
      |       ~~~~~~~^~~
/usr/include/c++/14/bits/std_abs.h:61:3: note: candidate: 'long long int std::abs(long long int)'
   61 |   abs(long long __x) { return __builtin_llabs (__x); }
      |   ^~~
/usr/include/c++/14/bits/std_abs.h:61:17: note:   no known conversion for argument 1 from 'cp' to 'long long int'
   61 |   abs(long long __x) { return __builtin_llabs (__x); }
      |       ~~~~~~~~~~^~~
/usr/include/c++/14/bits/std_abs.h:56:3: note: candidate: 'long int std::abs(long int)'
   56 |   abs(long __i) { return __builtin_labs(__i); }
      |   ^~~
/usr/include/c++/14/bits/std_abs.h:56:12: note:   no known conversion for argument 1 from 'cp' to 'long int'
   56 |   abs(long __i) { return __builtin_labs(__i); }
      |       ~~~~~^~~