QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#734430#9576. Ordainer of Inexorable Judgmentucup-team3931WA 18ms4192kbC++1419.9kb2024-11-11 10:27:262024-11-11 10:27:28

Judging History

你现在查看的是最新测评结果

  • [2024-12-23 14:23:26]
  • hack成功,自动添加数据
  • (/hack/1303)
  • [2024-12-06 11:32:56]
  • hack成功,自动添加数据
  • (/hack/1271)
  • [2024-11-14 21:58:28]
  • hack成功,自动添加数据
  • (/hack/1181)
  • [2024-11-11 10:27:28]
  • 评测
  • 测评结果:WA
  • 用时:18ms
  • 内存:4192kb
  • [2024-11-11 10:27:26]
  • 提交

answer

#include <bits/stdc++.h>
#define eb emplace_back
#define mp make_pair
#define fi first
#define se second
#define F(i, x, y) for (int i = (x); i <= (y); i++)
#define R(i, x, y) for (int i = (x); i >= (y); i--)
#define FIO(FILE) freopen(FILE".in", "r", stdin), freopen(FILE".out", "w", stdout)


using namespace std;
typedef long long ll;
typedef pair<int, int> pi;
bool Mbe;

namespace big{

using u32 = unsigned int;
using i64 = long long;
using u64 = unsigned long long;

struct BigDecimal {
private:
	int _size;
	int *_digits;
public:
	static const int IDLE_DIGITS = 13;
	static const int MAX_BITS = 30;
	static const int MAX_VALUE = (1 << MAX_BITS);
	static const int MAX_MASK = (1 << MAX_BITS) - 1;
	static const int conv_width = floor(log10(MAX_VALUE - 1));
	static const i64 conv_pow = pow(10, conv_width);
	static const int DIG = 50;
	static const int DLEN = ceil((DIG + IDLE_DIGITS) * log2(10) / MAX_BITS);
	int long_size(i64 x) {
		int res = 1; x = abs(x);
		while (x >>= MAX_BITS)
			++ res;
		return res;
	}
	void load_long(i64 x) {
		if (x == 0)
			_size = 0, _digits = nullptr;
		else {
			_size = long_size(x) + DLEN;
			_digits = new int[_size];
			memset(_digits, 0, sizeof(int) * _size);
			if (x < 0) _size = -_size;
			int ptr = DLEN; x = abs(x);
			while (x) {
				_digits[ptr ++] = x & MAX_MASK;
				x >>= MAX_BITS;
			}
		}
	}
	BigDecimal(): _size(0), _digits(nullptr) {}
	BigDecimal(int x) { load_long(x); }
	BigDecimal(i64 x)  { load_long(x); }
	BigDecimal(const char *str) {
		bool flg = false;
		if (*str == '-')
			flg = true, ++ str;
		const char *int_part = str;
		while (*int_part != '\0' && *int_part != '.')
			++ int_part;
		int int_len = int_part - str;
		_size = DLEN + ceil(int_len * log2(10) / MAX_BITS);
		_digits = new int[_size];
		memset(_digits, 0, sizeof(int) * _size);

		static i64 _pow10[conv_width + 1] = {0};
		if (_pow10[0] == 0) {
			_pow10[0] = 1;
			for (int i = 1; i <= conv_width; i ++)
				_pow10[i] = _pow10[i - 1] * 10;
		}

		int k, cur_width = 0, top_pos = DLEN;
		i64 cur_num = 0;
		while (str < int_part) {
			k = (*str) ^ 48;
			++ cur_width;
			cur_num = cur_num * 10 + k;
			if ((++ str) == int_part || cur_width == conv_width) {
				for (int i = DLEN; i < top_pos; i ++) {
					cur_num += _pow10[cur_width] * _digits[i];
					_digits[i] = cur_num & MAX_MASK;
					cur_num >>= MAX_BITS;
				}
				while (cur_num) {
					_digits[top_pos ++] = cur_num & MAX_MASK;
					cur_num >>= MAX_BITS;
				}
				cur_width = 0;
			}
		}

		if (*int_part == '.') {
			const char *dec_part = ++ int_part;
			const char *end = dec_part;
			while (*end != '\0')
				++ end;
			if (dec_part != end) {
				int dec_len = ceil((double)(end - dec_part) / conv_width);
				int *assist = new int[dec_len];
				memset(assist, 0, sizeof(int) * dec_len);

				for (int i = 0; i < dec_len; i ++) {
					for (int j = conv_width - 1; j >= 0; j --) {
						if (*dec_part == '\0')
							break;
						assist[i] += _pow10[j] * ((*dec_part++) ^ 48);
					}
				}

				for (int i = DLEN - 1; i >= 0; i --) {
					i64 carry = 0;
					for (int j = dec_len - 1; j >= 0; j --) {
						carry += (i64)MAX_VALUE * assist[j];
						assist[j] = carry % conv_pow;
						carry /= conv_pow;
					}
					_digits[i] = carry;
				}

				if (assist[0] >= conv_pow / 2) {
					for (int i = 0; i < _size; i ++) {
						if (++ _digits[i] >= MAX_VALUE)
							_digits[i] = 0;
						else
							break;
					}
				}

				delete[] assist;
			}
		}
		if (flg)
			_size = -_size;
		normalize();
	}
	~BigDecimal() {
		delete[] _digits;
	}
	void copy_from_other(const BigDecimal &bd) {
		_size = bd._size;
		if (_digits != nullptr)
			delete[] _digits, _digits = nullptr;
		if (_size != 0) {
			_digits = new int[abs(_size)];
			memcpy(_digits, bd._digits, sizeof(int) * abs(_size));
		}
	}
	BigDecimal(const BigDecimal &bd): _digits(nullptr) {
		copy_from_other(bd);
	}
	BigDecimal &operator=(const BigDecimal &bd) {
		if (this != &bd)
			copy_from_other(bd);
		return *this;
	}
	void swap(BigDecimal &bd) {
		std::swap(_size, bd._size);
		std::swap(_digits, bd._digits);
	}
	static BigDecimal epsilon() {
		BigDecimal res;
		res._size = 1;
		res._digits = new int[1];
		res._digits[0] = 1;
		return res;
	}
	int size() const { return abs(_size); }
	int int_size() const { return std::max(abs(_size) - DLEN, 0); }
	bool is_zero() const { return _size == 0; }
	bool is_nega() const { return _size < 0; }
	bool is_posi() const { return _size > 0; }
	void negate() { _size = -_size; }
	void normalize() {
		int i = size();
		while (i != 0 && _digits[i - 1] == 0)
			-- i;
		_size = (_size >= 0 ? i : -i);
	}
	void align(int new_size) {
		if (_size == 0)
			return;
		if (new_size <= 0) {
			_size = 0;
			delete[] _digits;
			_digits = nullptr;
			return;
		}
		int *temp = new int[new_size];
		memset(temp, 0, sizeof(int) * new_size);
		int valid = std::min(size(), new_size);
		memcpy(temp + std::max(0, new_size - valid)
			, _digits + std::max(0, size() - valid)
			, sizeof(int) * valid);
		if (is_nega())
			new_size = -new_size;
		_size = new_size;
		if (_digits != nullptr)
			delete[] _digits;
		_digits = temp;
	}
	void print(int MAX_DIG = DIG) {
		if (is_nega())
			putchar('-');
		int work_len = std::max((int)DLEN, size());
		int *assist = new int[work_len + 1];
		memset(assist, 0, sizeof(int) * (work_len + 1));
		if (size())
			memcpy(assist, _digits, sizeof(int) * size());

		char *dec_result = new char[MAX_DIG + 1];
		for (int i = 0; i <= MAX_DIG; i += conv_width) {
			i64 carry = 0;
			for (int j = 0; j < DLEN; j ++) {
				carry += conv_pow * assist[j];
				assist[j] = carry & MAX_MASK;
				carry >>= MAX_BITS;
			}
			for (int j = 0; j < conv_width; j ++) {
				int pos = i + conv_width - 1 - j;
				if (pos <= MAX_DIG)
					dec_result[pos] = ('0' + carry % 10);
				carry /= 10;
			}
		}

		if (dec_result[MAX_DIG] >= '5') {
			bool carry = true;
			for (int i = MAX_DIG - 1; i >= 0 && carry; i --) {
				if (dec_result[i] == '9')
					dec_result[i] = '0';
				else
					++ dec_result[i], carry = false;
			}
			if (carry) {
				for (int i = DLEN; i <= work_len; i ++) {
					if (++ assist[i] >= MAX_VALUE)
						assist[i] = 0;
					else
						break;
				}
			}
		}

		int top_pos = work_len;
		while (top_pos >= DLEN && assist[top_pos] == 0)
			-- top_pos;
		if (top_pos == DLEN - 1)
			putchar('0');
		else {
			int estimate_len = ceil((top_pos - DLEN + 1) * log10(MAX_VALUE));
			estimate_len = (estimate_len + conv_width - 1) / conv_width * conv_width;
			char *int_result = new char[estimate_len];
			for (int i = 0; i < estimate_len; i += conv_width) {
				i64 carry = 0;
				for (int j = top_pos; j >= (int)DLEN; j --) {
					carry = (carry << MAX_BITS) ^ assist[j];
					assist[j] = carry / conv_pow;
					carry = carry % conv_pow;
				}
				while (top_pos >= DLEN && assist[top_pos] == 0)
					-- top_pos;
				for (int j = 0; j < conv_width; j ++)
					int_result[i + j] = ('0' + carry % 10), carry /= 10;
			}
			bool printed = false;
			for (int i = estimate_len - 1; i >= 0; i --)
				if (printed |= int_result[i] != '0')
					putchar(int_result[i]);
			delete[] int_result;
		}
		putchar('.');
		for (int i = 0; i < MAX_DIG; i ++)
			putchar(dec_result[i]);
		delete[] dec_result;
	}
	friend int compare(const BigDecimal &a, const BigDecimal &b) {
		if (a._size != b._size)
			return a._size - b._size;
		for (int i = a.size() - 1; i >= 0; i --) if (a._digits[i] != b._digits[i])
			return a._size > 0 ? a._digits[i] - b._digits[i] : b._digits[i] - a._digits[i];
		return 0;
	}
	friend bool operator<(const BigDecimal &a, const BigDecimal &b) {
		return compare(a, b) < 0;
	}
	friend bool operator>(const BigDecimal &a, const BigDecimal &b) {
		return compare(a, b) > 0;
	}
	friend bool operator<=(const BigDecimal &a, const BigDecimal &b) {
		return compare(a, b) <= 0;
	}
	friend bool operator>=(const BigDecimal &a, const BigDecimal &b) {
		return compare(a, b) >= 0;
	}
	friend bool operator==(const BigDecimal &a, const BigDecimal &b) {
		return compare(a, b) == 0;
	}
	friend bool operator!=(const BigDecimal &a, const BigDecimal &b) {
		return compare(a, b) != 0;
	}

	void mul_num(i64 x) {
		if (is_zero())
			return;
		if (x < 0) x = -x, negate();
		int l = size();
		(is_nega() ? _size -= long_size(x) : _size += long_size(x));
		int *new_num = new int[size()];
		u64 carry = 0, low = x & MAX_MASK, high = x >> MAX_BITS;
		int i = 0;
		for (; i < l; i ++) {
			carry += low * _digits[i];
			new_num[i] = carry & MAX_MASK;
			carry >>= MAX_BITS;
			carry += high * _digits[i];
		}
		while (carry) {
			new_num[i ++] = carry & MAX_MASK;
			carry >>= MAX_BITS;
		}
		for (; i < size(); i ++)
			new_num[i] = 0;
		delete[] _digits;
		_digits = new_num;
		normalize();
	}
	friend BigDecimal operator*(const BigDecimal &a, const i64 x) {
		BigDecimal res = a;
		res.mul_num(x);
		return res;
	}
	friend BigDecimal operator*(const BigDecimal &a, const int x) {
		BigDecimal res = a;
		res.mul_num(x);
		return res;
	}
	void div_num(i64 x) {
		if (x < 0) x = -x, negate();
		i64 carry = 0;
		for (int i = size() - 1; i >= 0; i --) {
			carry = (carry << MAX_BITS) ^ _digits[i];
			_digits[i] = carry / x;
			carry %= x;
		}
		normalize();
	}
	friend BigDecimal operator/(const BigDecimal &a, const i64 x) {
		BigDecimal res = a;
		res.div_num(x);
		return res;
	}
	friend BigDecimal operator/(const BigDecimal &a, const int x) {
		BigDecimal res = a;
		res.div_num(x);
		return res;
	}
	friend BigDecimal &operator<<=(BigDecimal &a, const int x) {
		a.align(a.size() + x);
		return a;
	}
	friend BigDecimal &operator>>=(BigDecimal &a, const int x) {
		a.align(a.size() - x);
		return a;
	}

	friend BigDecimal num_add(const BigDecimal &a, const BigDecimal &b) {
		if (a.size() < b.size())
			return num_add(b, a);
		BigDecimal res(0);
		res._size = a.size() + 1;
		res._digits = new int[res._size];
		int i = 0, carry = 0;
		for (; i < b.size(); i ++) {
			carry = carry + a._digits[i] + b._digits[i];
			res._digits[i] = carry & MAX_MASK;
			carry >>= MAX_BITS;
		}
		for (; i < a.size(); i ++) {
			carry = carry + a._digits[i];
			res._digits[i] = carry & MAX_MASK;
			carry >>= MAX_BITS;
		}
		res._digits[i] = carry;
		res.normalize();
		return res;
	}
	friend BigDecimal num_sub_basic(const BigDecimal &a, const BigDecimal &b) {
		BigDecimal res(0);
		res._size = a.size();
		res._digits = new int[res._size];
		u32 borrow = 0;
		int i = 0;
		for (; i < b.size(); i ++) {
			borrow = a._digits[i] - borrow - b._digits[i];
			res._digits[i] = borrow & MAX_MASK;
			borrow >>= MAX_BITS;
			borrow &= 1;
		}
		for (; i < a.size(); i ++) {
			borrow = a._digits[i] - borrow;
			res._digits[i] = borrow & MAX_MASK;
			borrow >>= MAX_BITS;
			borrow &= 1;
		}
		res.normalize();
		return res;
	}
	friend BigDecimal num_sub(const BigDecimal &a, const BigDecimal &b) {
		if (a.size() > b.size())
			return num_sub_basic(a, b);
		if (a.size() < b.size()) {
			BigDecimal res = num_sub_basic(b, a);
			res.negate();
			return res;
		}
		for (int i = a.size() - 1; i >= 0; i --) if (a._digits[i] != b._digits[i]) {
			if (a._digits[i] < b._digits[i]) {
				BigDecimal res = num_sub_basic(b, a);
				res.negate();
				return res;
			}
			else
				return num_sub_basic(a, b);
		}
		return BigDecimal();
	}
	friend BigDecimal operator-(const BigDecimal &a) {
		BigDecimal res = a;
		res.negate();
		return res;
	}
	friend BigDecimal operator+(const BigDecimal &a, const BigDecimal &b) {
		if (a.is_zero())
			return b;
		if (b.is_zero())
			return a;
		if (a.is_nega()) {
			if (b.is_nega()) {
				BigDecimal res = num_add(a, b);
				res.negate();
				return res;
			}
			return num_sub(b, a);
		}
		if (b.is_nega())
			return num_sub(a, b);
		return num_add(a, b);
	}
	friend BigDecimal operator-(const BigDecimal &a, const BigDecimal &b) {
		if (a.is_zero())
			return - b;
		if (b.is_zero())
			return a;
		if (a.is_nega()) {
			BigDecimal res = (b.is_nega()? num_sub(a, b) : num_add(a, b));
			res.negate();
			return res;
		}
		if (b.is_nega())
			return num_add(a, b);
		return num_sub(a, b);
	}
	friend BigDecimal operator*(const BigDecimal &a, const BigDecimal &b) {
		if (a.size() == 0 || b.size() == 0)
			return BigDecimal();
		BigDecimal res(0);
		res._size = std::max(0, a.size() + b.size() - a.DLEN) + 1;
		res._digits = new int[res._size];
		i64 current = 0, carry = 0;
		for (int tot = - a.DLEN; tot < res._size; tot ++) {
			for (int i = std::max(tot + a.DLEN - b.size() + 1, 0); i < a.size() && i <= tot + a.DLEN; i ++) {
				current += (i64)a._digits[i] * b._digits[tot + a.DLEN - i];
				if (current >> 60) {
					carry += current >> MAX_BITS;
					current &= MAX_MASK;
				}
			}
			carry += current >> MAX_BITS;
			current &= MAX_MASK;
			if (tot >= 0)
				res._digits[tot] = current;
			current = carry;
			carry = 0;
		}
		if (a.is_nega() ^ b.is_nega())
			res.negate();
		res.normalize();
		return res;
	}
	void div2() {
		int carry = 0;
		for (int i = size() - 1; i >= 0; i --) {
			carry = (carry << MAX_BITS) ^ _digits[i];
			_digits[i] = carry >> 1;
			carry &= 1;
		}
		normalize();
	}
	friend BigDecimal operator/(const BigDecimal &a, const BigDecimal &b) {
		if (a.is_zero())
			return BigDecimal();
		BigDecimal ta = a, tb = b, res(0);
		int len = ta.size() - tb.size() + a.DLEN + 1;
		if (len <= 0)
			return res;
		res._size = len;
		res._digits = new int[len];

		ta._size = abs(ta._size);
		tb._size = abs(tb._size);
		tb.align(ta.size() + 1);
		for (int i = len - 1; i >= 0; i --) {
			int num = 0;
			for (int j = 0; j < MAX_BITS; j ++) {
				tb.div2(); num <<= 1;
				if (ta >= tb) {
					ta = num_sub(ta, tb);
					num ^= 1;
				}
			}
			res._digits[i] = num;
		}
		if (a.is_nega() ^ b.is_nega())
			res.negate();
		res.normalize();
		return res;
	}

	BigDecimal integer() const {
		BigDecimal res = *this;
		for (int i = 0; i < DLEN && i < size(); i ++)
			res._digits[i] = 0;
		res.normalize();
		return res;
	}

	BigDecimal decimal() const {
		if (is_zero())
			return BigDecimal();
		int nlen = std::min(DLEN, size());
		BigDecimal res(0);
		res._size = nlen;
		res._digits = new int[nlen];
		memcpy(res._digits, _digits, sizeof(int) * nlen);
		if (is_nega())
			res.negate();
		return res;
	}

	friend BigDecimal abs(BigDecimal x) {
		x._size = std::abs(x._size);
		return x;
	}
};
const BigDecimal _ln2("0.693147180559945309417232121458176568075500134360255254120680");
const BigDecimal _pi("3.141592653589793238462643383279502884197169399375105820974944");
const BigDecimal _sqrt2("1.414213562373095048801688724209698078569671875376948073176680");
const BigDecimal _one("1");
const BigDecimal _pi_2 = _pi * 2;
const BigDecimal _pi_half = _pi / 2;
const BigDecimal _eps = BigDecimal::epsilon();

BigDecimal exp(BigDecimal x) {
	BigDecimal ans = 1, cnt = 1;
	for (int i = 1; ; i ++) {
		cnt = cnt * x / i;
		if (cnt.is_zero())
			break;
		ans = ans + cnt;
	}
	return ans;
}

BigDecimal sqrt(BigDecimal x) {
	BigDecimal cur = x, las = 0;
	do {
		las.swap(cur);
		cur = (las + x / las) / 2;
	} while (abs(cur - las) > _eps);
	return cur;
}

BigDecimal ln(BigDecimal x) {
	if (x < _one)
		return -ln(_one / x);
	BigDecimal coef = 0;
	int num = x.int_size();
	if (num > 1)
		x >>= num - 1, coef = _ln2 * ((long long)(num - 1) * x.MAX_BITS);
	while (x > _sqrt2)
		x.div2(), coef = coef + _ln2;
	x = (x - _one) / (x + _one);

	BigDecimal cnt = x * 2, res = cnt;
	x = x * x;
	for (int i = 3; ; i += 2) {
		cnt = cnt * x;
		BigDecimal p = cnt / i;
		if (p.is_zero())
			break;
		res = res + p;
	}
	return res + coef;
}

BigDecimal pow(BigDecimal a, BigDecimal x) {
	return exp(ln(a) * x);
}

BigDecimal sin(BigDecimal x) {
	if (x.is_nega())
		return -sin(-x);
	if (x >= _pi_2)
		x = x - (x / _pi_2).integer() * _pi_2;
	BigDecimal res = x, cur = x;
	x = x * x;
	for (long long i = 3; ; i += 2) {
		cur = cur * x / (i * (i - 1));
		if (cur.is_zero())
			break;
		cur.negate();
		res = res + cur;
	}
	return res;
}

BigDecimal cos(BigDecimal x) {
	if (x.is_nega())
		return cos(-x);
	if (x >= _pi_2)
		x = x - (x / _pi_2).integer() * _pi_2;
	BigDecimal res = 1, cur = 1;
	x = x * x;
	for (long long i = 2; ; i += 2) {
		cur = cur * x / BigDecimal(i * (i - 1));
		cur.negate();
		if (cur.is_zero())
			break;
		res = res + cur;
	}
	return res;
}

BigDecimal tan(BigDecimal x) {
	return sin(x) / cos(x);
}

BigDecimal atan(BigDecimal x) {
	static BigDecimal comp("0.1");
	if (x.is_nega())
		return - atan(-x);
	if (x > _one)
		return _pi_half - atan(_one / x);
	if (x >= comp)
		return atan((sqrt(_one + x * x) - _one) / x) * 2;
	BigDecimal cnt = x, res = x;
	x = x * x; x.negate();
	for (int i = 3; ; i += 2) {
		cnt = cnt * x;
		BigDecimal p = cnt / i;
		if (p.is_zero())
			break;
		res = res + p;
	}
	return res;
}

BigDecimal asin(BigDecimal x) {
	return atan(x / sqrt(_one - x * x));
}

BigDecimal acos(BigDecimal x) {
	return _pi_half - asin(x);
}

BigDecimal atan2(BigDecimal y, BigDecimal x) {
	if (x.is_posi())
		return atan(y / x);
	if (x.is_zero()) {
		if (y.is_nega())
			return - _pi_half;
		return _pi_half;
	}
	if (y.is_nega())
		return atan(y / x) - _pi;
	return atan(y / x) + _pi;
}
}

using namespace big;

#define int long long
#define db BigDecimal
#define pc putchar

struct vc {
	
	db x, y;
	
	vc () { }
	vc (db _x, db _y) : x(_x), y(_y) { }
	
};

const int N = 105;
const db Pi = acos(db(-1));
db Eps = 1;

int n, m, _x, _y, r, t;
db L[N], R[N], sum;
vector<int> tp;

db the(vc p) {
	db res = atan(p.y / p.x);
	if (p.x < 0 && p.y >= 0) {
		res = res + Pi;
	}
	if (p.x < 0 && p.y < 0) {
		res = res + Pi;
	}
	if (p.x >= 0 && p.y < 0) {
		res = res + 2 * Pi;
	}
	return res;
}

db qry(db tm) {
	if (L[*tp.begin()] > tm) {
		return 0;
	}
	db cr = L[*tp.begin()], res = 0;
	for (int i : tp) {
		db l = L[i], r = R[i];
		if (r < cr) {
			continue;
		}
		if (l > tm) {
			return res;
		}
		if (l <= cr) {
			res = res + r - cr, cr = r;
		} else {
			res = res + r - l, cr = r;
		}
		if (cr > tm) {
			res = res - cr + tm;
			return res;
		}
	}
	return res;
}

const double PI = acos(-1);

void solve() {
	cin >> n >> _x >> _y >> r >> t;
	int T = 15;
	while (T--) {
		Eps = Eps / (db)10;
	}
	db mx = -2 * Pi, mn = 4 * Pi, mnn = 4 * Pi, mxx = -2 * Pi;
	vector<pi> pt;
	F (i, 1, n) {
		int x, y;
		cin >> x >> y;
		pt.eb(x, y);
	}
	for (pi _ : pt) {
		int x = _.fi, y = _.se;
		db dis = x * x + y * y; dis = sqrt(dis);
		vc u = vc(x / dis, y / dis);
		db ang = asin(r / dis);
		vc p = vc(u.x * cos(ang) - u.y * sin(ang), u.x * sin(ang) + u.y * cos(ang));
		vc q = vc(u.x * cos(-ang) - u.y * sin(-ang), u.x * sin(-ang) + u.y * cos(-ang));
		db L = the(p), R = the(q);
		if (abs(L - 2 * Pi) <= Eps) {
			L = 0;
		}
		if (abs(R - 2 * Pi) <= Eps) {
			R = 0;
		}
		swap(L, R);
		if (L <= R) {
			mn = min(mn, L);
			mx = max(mx, R);
		} else {
			mxx = max(mxx, R);
			mnn = min(mnn, L);
		}
	}
	if (mn <= mx) {
		m++;
		L[m] = mn, R[m] = mx;
	}
	if (mxx >= 0) {
		m++;
		L[m] = 0, R[m] = mxx;
	}
	if (mnn <= 2 * Pi) {
		m++;
		L[m] = mnn, R[m] = 2 * Pi;
	}
	F (i, 1, m) {
		tp.eb(i);
	}
	sort(tp.begin(), tp.end(), [](int &x, int &y) {
		return L[x] < L[y];
	});
	db _t = the(vc(_x, _y));
	db __t = t + _t;
	int len = floor(t / (2 * PI));
	if (__t - len * 2 * Pi > 2 * Pi) {
		len++;
	}
	(qry(2 * Pi) * len + qry(__t - len * 2 * Pi) - qry(_t)).print(10);
}

bool Med;
signed main() {
	// FIO("");
	// ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cerr << (&Mbe - &Med) / 1048576.0 << " MB\n";
	int T = 1;
	// cin >> T;
	while (T--) solve();
	cerr << (int)(1e3 * clock() / CLOCKS_PER_SEC) << " ms\n";
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 3ms
memory: 4116kb

input:

3 1 0 1 1
1 2
2 1
2 2

output:

1.0000000000

result:

ok found '1.0000000', expected '1.0000000', error '0.0000000'

Test #2:

score: 0
Accepted
time: 0ms
memory: 3992kb

input:

3 1 0 1 2
1 2
2 1
2 2

output:

1.5707963268

result:

ok found '1.5707963', expected '1.5707963', error '0.0000000'

Test #3:

score: 0
Accepted
time: 3ms
memory: 4116kb

input:

3 1 0 1 10000
1 2
2 1
2 2

output:

2500.7077522575

result:

ok found '2500.7077523', expected '2500.7077523', error '0.0000000'

Test #4:

score: 0
Accepted
time: 2ms
memory: 4104kb

input:

3 10000 10000 1 10000
10000 9999
10000 10000
9999 10000

output:

0.3842413003

result:

ok found '0.3842413', expected '0.3842413', error '0.0000000'

Test #5:

score: 0
Accepted
time: 3ms
memory: 4036kb

input:

3 -10000 -10000 10000 10000
-10000 -9999
-10000 -10000
-9999 -10000

output:

2500.2406700096

result:

ok found '2500.2406700', expected '2500.2406700', error '0.0000000'

Test #6:

score: 0
Accepted
time: 0ms
memory: 4072kb

input:

4 1 0 1 10000
-2 3400
-4 10000
-4 -10000
-2 -3400

output:

4999.2191154087

result:

ok found '4999.2191154', expected '4999.2191154', error '0.0000000'

Test #7:

score: 0
Accepted
time: 2ms
memory: 3996kb

input:

4 1 0 1 10000
-2 3300
-4 10000
-4 -10000
-2 -3300

output:

4999.2003918548

result:

ok found '4999.2003919', expected '4999.2003919', error '0.0000000'

Test #8:

score: 0
Accepted
time: 4ms
memory: 4016kb

input:

4 -3040 2716 2147 2
-9033 -8520
-8999 -8533
-8988 -8511
-9004 -8495

output:

0.3508300583

result:

ok found '0.3508301', expected '0.3508301', error '0.0000000'

Test #9:

score: 0
Accepted
time: 3ms
memory: 4036kb

input:

3 8168 -766 1549 1256
-3951 -6425
-3874 -6439
-3911 -6389

output:

84.8328611610

result:

ok found '84.8328612', expected '84.8328612', error '0.0000000'

Test #10:

score: 0
Accepted
time: 9ms
memory: 4184kb

input:

8 2977 -3175 8766 2
-4868 7759
-4867 7925
-4867 7950
-4886 7952
-4979 7953
-5048 7877
-5003 7761
-4936 7759

output:

0.3278606469

result:

ok found '0.3278606', expected '0.3278606', error '0.0000000'

Test #11:

score: 0
Accepted
time: 3ms
memory: 4192kb

input:

13 -1715 -4640 267 8651
272 6659
264 6660
208 6664
108 6625
107 6621
93 6564
90 6551
90 6485
124 6474
219 6477
283 6525
288 6591
286 6657

output:

153.5896227847

result:

ok found '153.5896228', expected '153.5896228', error '0.0000000'

Test #12:

score: 0
Accepted
time: 7ms
memory: 4120kb

input:

8 -9743 -7629 775 7
-194 981
-191 1720
-193 1845
-705 1929
-959 1950
-1131 1894
-1151 1604
-1031 1020

output:

2.0460062044

result:

ok found '2.0460062', expected '2.0460062', error '0.0000000'

Test #13:

score: 0
Accepted
time: 9ms
memory: 4120kb

input:

9 -6770 -1426 3491 1918
-2118 2886
-2063 3245
-2122 3709
-2129 3737
-2850 3718
-2984 3650
-3042 3462
-3028 2972
-2688 2888

output:

822.2411849637

result:

ok found '822.2411850', expected '822.2411850', error '0.0000000'

Test #14:

score: 0
Accepted
time: 13ms
memory: 3936kb

input:

12 1616 -7384 5256 10
-5607 2623
-5838 2843
-6117 2986
-6592 3169
-7129 3120
-7334 3069
-7406 2295
-7369 1712
-7091 1287
-6312 1252
-5596 1592
-5457 2088

output:

3.0387653771

result:

ok found '3.0387654', expected '3.0387654', error '0.0000000'

Test #15:

score: 0
Accepted
time: 8ms
memory: 3980kb

input:

10 -4546 5056 639 2996
4851 -3506
6078 -3725
6629 -3674
6775 -3296
6743 -2137
6585 -1866
5334 -1837
4950 -2020
4873 -2260
4852 -3240

output:

262.4239690789

result:

ok found '262.4239691', expected '262.4239691', error '0.0000000'

Test #16:

score: 0
Accepted
time: 17ms
memory: 4068kb

input:

20 4847 -6818 2502 2
-2164 -3844
-2453 -3826
-4654 -3818
-5073 -3829
-5212 -3833
-5828 -3921
-5889 -6065
-5896 -6716
-5877 -7349
-5855 -7457
-5619 -7711
-5485 -7786
-3743 -7809
-2345 -7747
-2075 -7682
-1960 -7364
-1900 -7015
-1901 -6391
-1922 -4091
-1968 -4028

output:

0.0000000000

result:

ok found '0.0000000', expected '0.0000000', error '-0.0000000'

Test #17:

score: 0
Accepted
time: 12ms
memory: 4040kb

input:

14 -1792 -5751 2349 4072
-3697 -4432
-4268 -4431
-6475 -4433
-7140 -4464
-7320 -4526
-7354 -5333
-7357 -5731
-7366 -7076
-7346 -7868
-7218 -8415
-4044 -8407
-3412 -8398
-3388 -7296
-3391 -4497

output:

758.9667683479

result:

ok found '758.9667683', expected '758.9667683', error '0.0000000'

Test #18:

score: 0
Accepted
time: 17ms
memory: 4068kb

input:

23 8820 -5943 927 1
-1319 -4435
-1321 -297
-1361 -149
-1379 -119
-1619 13
-6579 12
-7090 11
-7184 -5
-7209 -18
-7277 -62
-7316 -672
-7316 -5095
-7295 -5877
-7273 -5921
-7250 -5955
-6569 -5967
-5927 -5975
-4278 -5977
-2646 -5978
-1477 -5965
-1472 -5962
-1404 -5892
-1334 -5809

output:

0.0000000000

result:

ok found '0.0000000', expected '0.0000000', error '-0.0000000'

Test #19:

score: -100
Wrong Answer
time: 18ms
memory: 4136kb

input:

22 -5664 7523 2588 8083
3456 2960
3446 2865
3433 2724
3432 615
3434 -1360
3446 -2929
3602 -2969
6204 -2972
8409 -2972
9227 -2969
9329 -2929
9375 -2890
9426 -2575
9432 2499
9432 2620
9390 2954
9386 2968
9277 3023
8340 3026
6809 3026
3634 3020
3600 3018

output:

8083.0000000000

result:

wrong answer 1st numbers differ - expected: '3378.3117401', found: '8083.0000000', error = '1.3926152'