QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#730973#9576. Ordainer of Inexorable Judgmentucup-team3931WA 64ms4204kbC++1420.2kb2024-11-09 22:51:252024-11-09 22:51:26

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-09 22:51:26]
  • 评测
  • 测评结果:WA
  • 用时:64ms
  • 内存:4204kb
  • [2024-11-09 22:51:25]
  • 提交

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 fl0 = 0, fl1 = 0;
	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;
		if (x * _y - y * _x < 0) {
			fl0 = 1;
		} else {
			fl1 = 1;
		}
		pt.eb(x, y);
	}
	if (!fl0 || !fl1) {
		_x = -_x, _y = -_y;
		for (pi &p : pt) {
			p.fi = -p.fi;
			p.se = -p.se;
		}
	}
	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);
		// L.print(10), pc(' '), R.print(10), pc('\n');
		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;
	}
	// pc('\n');
	F (i, 1, m) {
		// L[i].print(10), pc(' '), R[i].print(10), pc('\n');
		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).print(10), pc('\n');
	(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;
}

詳細信息

Test #1:

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

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: 3ms
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: 4036kb

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: 3ms
memory: 3996kb

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: 4204kb

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: 2ms
memory: 4124kb

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: 3992kb

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: 3952kb

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: 4120kb

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: 4020kb

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: 6ms
memory: 4128kb

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: 8ms
memory: 4048kb

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: 6ms
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: 3992kb

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: 4ms
memory: 4124kb

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: 4084kb

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: 4132kb

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: 3992kb

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: 0
Accepted
time: 18ms
memory: 3996kb

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:

3378.3117400794

result:

ok found '3378.3117401', expected '3378.3117401', error '0.0000000'

Test #20:

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

input:

19 -1886 -3232 561 6
-8846 -7186
-8842 -7658
-8705 -7660
-1521 -7660
-1248 -7658
-1048 -7654
-906 -7650
-877 -7643
-858 -7619
-846 -7598
-846 -1489
-847 -277
-851 311
-1001 332
-1072 340
-7480 340
-8844 337
-8845 332
-8846 -9

output:

2.2682333835

result:

ok found '2.2682334', expected '2.2682334', error '0.0000000'

Test #21:

score: 0
Accepted
time: 21ms
memory: 4000kb

input:

27 -8996 -3721 1431 7076
5671 -1552
3604 -1551
1370 -1551
-1106 -1552
-1845 -1553
-1945 -1582
-1964 -1649
-1981 -1924
-1981 -7875
-1980 -8365
-1979 -8628
-1977 -8988
-1974 -9316
-1963 -9548
-1871 -9550
-1288 -9551
5996 -9551
6006 -9455
6010 -9391
6012 -9343
6014 -9271
6015 -9144
6019 -7478
6019 -263...

output:

3442.5591737069

result:

ok found '3442.5591737', expected '3442.5591737', error '0.0000000'

Test #22:

score: 0
Accepted
time: 5ms
memory: 4000kb

input:

5 -7413 -6822 8371 4
-8435 1969
-8446 1918
-8438 1885
-8390 1892
-8422 1955

output:

0.3951577327

result:

ok found '0.3951577', expected '0.3951577', error '0.0000000'

Test #23:

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

input:

5 5998 6928 4304 9649
-9352 -3336
-9335 -3337
-9282 -3320
-9273 -3304
-9313 -3284

output:

1393.5958786549

result:

ok found '1393.5958787', expected '1393.5958787', error '0.0000000'

Test #24:

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

input:

13 7526 -9874 3812 9
2735 4538
2673 4561
2663 4563
2652 4563
2609 4539
2607 4535
2582 4483
2593 4434
2601 4415
2711 4396
2735 4405
2749 4417
2777 4472

output:

3.2992360263

result:

ok found '3.2992360', expected '3.2992360', error '0.0000000'

Test #25:

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

input:

9 1419 -6061 9067 634
-1331 -9405
-1206 -9456
-1165 -9391
-1157 -9359
-1184 -9294
-1252 -9276
-1312 -9299
-1329 -9336
-1336 -9354

output:

266.3903805944

result:

ok found '266.3903806', expected '266.3903806', error '0.0000000'

Test #26:

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

input:

15 -5029 6807 4505 5
5196 -3478
5116 -3556
5042 -3690
5048 -3936
5065 -4054
5286 -4238
5369 -4303
5565 -4330
5688 -4296
5868 -4016
5935 -3724
5909 -3628
5829 -3532
5702 -3457
5492 -3365

output:

1.6678521023

result:

ok found '1.6678521', expected '1.6678521', error '0.0000000'

Test #27:

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

input:

8 -6347 -8448 6719 6605
3802 9434
3837 9059
4354 9016
4552 9221
4542 9631
4330 9896
4110 9896
3900 9862

output:

1615.0782899692

result:

ok found '1615.0782900', expected '1615.0782900', error '0.0000000'

Test #28:

score: 0
Accepted
time: 6ms
memory: 4000kb

input:

12 -8728 4539 203 9
-3507 4626
-3495 4605
-3095 4278
-3072 4264
-2541 4110
-2080 4377
-1922 4677
-1746 5070
-1927 5624
-1971 5701
-3196 5842
-3461 5433

output:

0.3905393493

result:

ok found '0.3905393', expected '0.3905393', error '0.0000000'

Test #29:

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

input:

9 -599 -8427 1668 7471
5447 4490
6396 4800
6412 5020
6427 5800
5979 6214
5251 6192
4832 5791
4774 5592
4737 5033

output:

790.3949232559

result:

ok found '790.3949233', expected '790.3949233', error '0.0000000'

Test #30:

score: 0
Accepted
time: 11ms
memory: 4000kb

input:

26 4318 -8273 11 10
-2611 829
-2521 620
-2457 549
-2410 500
-2220 313
-1611 -93
-1294 -177
-210 -92
-76 -40
542 469
735 660
817 791
1022 1241
1107 1882
825 2680
641 2986
578 3043
94 3448
-229 3634
-1086 3713
-1501 3575
-2117 3250
-2441 2901
-2583 2720
-2858 2050
-2837 1715

output:

4.9856266895

result:

ok found '4.9856267', expected '4.9856267', error '0.0000000'

Test #31:

score: 0
Accepted
time: 24ms
memory: 3948kb

input:

28 -5212 -3307 3213 9807
-8651 3425
-8608 2890
-8399 2503
-8247 2230
-8135 2085
-8009 1935
-7593 1637
-7417 1512
-6970 1450
-6316 1388
-6030 1478
-5588 1674
-5323 1882
-4788 2794
-4747 2896
-4855 3889
-4949 4158
-5050 4422
-5377 4814
-5501 4953
-5989 5188
-6221 5243
-6566 5324
-7210 5255
-7874 4929
...

output:

2376.0286896841

result:

ok found '2376.0286897', expected '2376.0286897', error '0.0000000'

Test #32:

score: 0
Accepted
time: 32ms
memory: 4136kb

input:

53 4446 -5955 79 3
1828 -4250
1917 -4046
2082 -3505
2127 -3118
2114 -2868
2109 -2803
2070 -2361
1901 -1776
1770 -1497
1501 -1099
1323 -891
1232 -797
637 -337
-125 -45
-424 29
-600 55
-1256 7
-1705 -60
-2158 -234
-2276 -288
-2500 -447
-2858 -728
-3083 -924
-3263 -1179
-3534 -1612
-3648 -1840
-3707 -2...

output:

0.5527082689

result:

ok found '0.5527083', expected '0.5527083', error '0.0000000'

Test #33:

score: 0
Accepted
time: 37ms
memory: 4124kb

input:

59 1400 -4139 336 7647
-139 3085
-145 3609
-209 3969
-229 4049
-258 4152
-378 4474
-543 4810
-608 4909
-722 5059
-1056 5443
-1231 5599
-1668 5902
-2201 6131
-2281 6156
-2706 6251
-3150 6282
-3431 6256
-3667 6227
-4165 6087
-4377 6000
-4434 5967
-4785 5758
-5147 5484
-5426 5203
-5656 4847
-5848 4523
...

output:

2006.4089937545

result:

ok found '2006.4089938', expected '2006.4089938', error '0.0000000'

Test #34:

score: 0
Accepted
time: 57ms
memory: 4112kb

input:

100 1100 -2467 56 4
-594 -189
-315 -68
-92 52
141 210
332 340
580 548
659 617
802 762
977 960
1076 1086
1376 1558
1547 1885
1663 2169
1728 2372
1770 2522
1852 2932
1878 3157
1886 3377
1891 3590
1891 3634
1864 3927
1818 4281
1781 4430
1661 4832
1537 5157
1380 5466
1189 5773
1155 5821
1062 5949
915 61...

output:

2.1694457553

result:

ok found '2.1694458', expected '2.1694458', error '0.0000000'

Test #35:

score: -100
Wrong Answer
time: 64ms
memory: 4128kb

input:

100 6873 -9062 270 5917
230 631
262 351
367 -155
397 -257
549 -653
607 -791
722 -1021
809 -1169
890 -1294
1128 -1604
1420 -1924
1513 -2010
1674 -2147
1841 -2285
2123 -2477
2431 -2641
3346 -2970
3658 -3030
4110 -3066
4671 -3036
4779 -3021
4961 -2995
5156 -2951
5316 -2910
5571 -2827
5850 -2716
6473 -2...

output:

5917.0000000000

result:

wrong answer 1st numbers differ - expected: '2664.3740107', found: '5917.0000000', error = '1.2207843'