QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#730664 | #9576. Ordainer of Inexorable Judgment | ucup-team296# | AC ✓ | 0ms | 3140kb | Rust | 40.4kb | 2024-11-09 20:58:24 | 2024-12-23 14:26:29 |
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 20:58:24]
- 提交
answer
// https://contest.ucup.ac/contest/1828/problem/9576
pub mod solution {
//{"name":"M. Ordainer of Inexorable Judgment","group":"Universal Cup - The 3rd Universal Cup. Stage 16: Nanjing","url":"https://contest.ucup.ac/contest/1828/problem/9576","interactive":false,"timeLimit":1000,"tests":[{"input":"3 1 0 1 1\n1 2\n2 1\n2 2\n","output":"1.000000000000\n"},{"input":"3 1 0 1 2\n1 2\n2 1\n2 2\n","output":"1.570796326795\n"},{"input":"3 1 0 1 10000\n1 2\n2 1\n2 2\n","output":"2500.707752257475\n"}],"testType":"single","input":{"type":"stdin","fileName":null,"pattern":null},"output":{"type":"stdout","fileName":null,"pattern":null},"languages":{"java":{"taskClass":"MOrdainerOfInexorableJudgment"}}}
use crate::algo_lib::collections::min_max::MinimMaxim;
use crate::algo_lib::geometry::circle::Circle;
use crate::algo_lib::geometry::geometry_utils::canonize_angle;
use crate::algo_lib::geometry::geometry_utils::canonize_angle_base;
use crate::algo_lib::geometry::point::Point;
use crate::algo_lib::geometry::ray::Ray;
use crate::algo_lib::io::input::Input;
use crate::algo_lib::io::output::Output;
use crate::algo_lib::misc::test_type::TaskType;
use crate::algo_lib::misc::test_type::TestType;
use crate::algo_lib::numbers::num_traits::algebra::Zero;
use crate::algo_lib::numbers::real::Real;
use crate::algo_lib::numbers::real::RealReader;
type PreCalc = ();
fn solve(input: &mut Input, out: &mut Output, _test_case: usize, _data: &mut PreCalc) {
let n = input.read_size();
let dir = input.read::<Point<Real>>().angle();
let d = input.read_real();
let mut t = input.read_real();
let points = input.read_vec::<Point<Real>>(n);
let circle = Circle::new(Point::origin(), d);
let base_dir = points[0].angle();
let mut max_angle = base_dir;
let mut min_angle = base_dir;
for p in points {
let tangent = circle.tangent_points(p);
for t in tangent {
let angle = Ray::new(t, p).angle();
let delta = canonize_angle(angle - base_dir);
if delta > 0. {
max_angle.maxim(base_dir + delta);
} else {
min_angle.minim(base_dir + delta);
}
}
}
let span = max_angle - min_angle;
let mut dir = canonize_angle_base(dir - min_angle, Real::zero());
let mut ans = Real::zero();
if dir < span {
let rotate = (span - dir).min(t);
t -= rotate;
ans += rotate;
dir = span;
}
while t > 0. {
let rotate = (2. * Real::PI - dir).min(t);
t -= rotate;
let rotate = span.min(t);
t -= rotate;
ans += rotate;
dir = span;
}
out.print_line(ans);
}
pub static TEST_TYPE: TestType = TestType::Single;
pub static TASK_TYPE: TaskType = TaskType::Classic;
pub(crate) fn run(mut input: Input, mut output: Output) -> bool {
let mut pre_calc = ();
match TEST_TYPE {
TestType::Single => solve(&mut input, &mut output, 1, &mut pre_calc),
TestType::MultiNumber => {
let t = input.read();
for i in 1..=t {
solve(&mut input, &mut output, i, &mut pre_calc);
}
}
TestType::MultiEof => {
let mut i = 1;
while input.peek().is_some() {
solve(&mut input, &mut output, i, &mut pre_calc);
i += 1;
}
}
}
output.flush();
match TASK_TYPE {
TaskType::Classic => input.is_empty(),
TaskType::Interactive => true,
}
}
}
pub mod algo_lib {
pub mod collections {
pub mod iter_ext {
pub mod find_count {
pub trait IterFindCount<T: PartialEq>: Iterator<Item = T> + Sized {
fn find_eq(mut self, item: T) -> Option<usize> {
self.position(|r| r == item)
}
fn count_eq(self, item: &T) -> usize {
self.filter(|r| r == item).count()
}
}
impl<T: PartialEq, I: Iterator<Item = T>> IterFindCount<T> for I {}
}
}
pub mod min_max {
pub trait MinimMaxim<Rhs = Self>: PartialOrd + Sized {
fn minim(&mut self, other: Rhs) -> bool;
fn maxim(&mut self, other: Rhs) -> bool;
}
impl<T: PartialOrd> MinimMaxim for T {
fn minim(&mut self, other: Self) -> bool {
if other < *self {
*self = other;
true
} else {
false
}
}
fn maxim(&mut self, other: Self) -> bool {
if other > *self {
*self = other;
true
} else {
false
}
}
}
impl<T: PartialOrd> MinimMaxim<T> for Option<T> {
fn minim(&mut self, other: T) -> bool {
match self {
None => {
*self = Some(other);
true
}
Some(v) => v.minim(other),
}
}
fn maxim(&mut self, other: T) -> bool {
match self {
None => {
*self = Some(other);
true
}
Some(v) => v.maxim(other),
}
}
}
}
pub mod vec_ext {
pub mod default {
pub fn default_vec<T: Default>(len: usize) -> Vec<T> {
let mut v = Vec::with_capacity(len);
for _ in 0..len {
v.push(T::default());
}
v
}
}
}
}
pub mod geometry {
pub mod base {
use crate::algo_lib::numbers::num_traits::algebra::Ring;
pub trait Base: Copy + Ring + 'static {}
impl<T: Copy + Ring + 'static> Base for T {}
}
pub mod circle {
use crate::algo_lib::geometry::base::Base;
use crate::algo_lib::geometry::line::Line;
use crate::algo_lib::geometry::point::Point;
use crate::algo_lib::numbers::real::Real;
pub struct Circle<T> {
pub center: Point<T>,
pub radius: T,
}
impl<T> Circle<T> {
pub fn new(center: Point<T>, radius: T) -> Self {
Circle { center, radius }
}
}
impl<T: Base + Ord> Circle<T> {
pub fn contains(&self, point: Point<T>) -> bool {
self.center.square_dist_point(point) <= self.radius * self.radius
}
}
impl Circle<Real> {
pub fn intersect_line(&self, l: Line<Real>) -> Vec<Point<Real>> {
let dist = l.dist_point(self.center);
if dist > self.radius {
return vec![];
}
let perp = l.perpendicular(self.center);
let base = l.intersect(perp);
if dist == self.radius {
return vec![base];
}
let delta = (self.radius * self.radius - dist * dist).sqrt();
vec![
base + Point::new(perp.a, perp.b) * delta,
base - Point::new(perp.a, perp.b) * delta,
]
}
pub fn intersect_circle(&self, d: Circle<Real>) -> Vec<Point<Real>> {
let dist = self.center.dist_point(d.center);
if dist == 0. {
return vec![];
}
let a = 2. * (d.center.x - self.center.x);
let b = 2. * (d.center.y - self.center.y);
let f = d.radius * d.radius - self.radius * self.radius + self.center.value_square()
- d.center.value_square();
let l = Line::new(a, b, f);
self.intersect_line(l)
}
pub fn tangent_points(&self, p: Point<Real>) -> Vec<Point<Real>> {
let dist = self.center.dist_point(p);
if dist < self.radius {
return vec![];
}
if dist == self.radius {
return vec![p];
}
let power = Circle::new(p, ((dist - self.radius) * (dist + self.radius)).sqrt());
self.intersect_circle(power)
}
}
}
pub mod geometry_utils {
use crate::algo_lib::numbers::num_traits::algebra::Zero;
use crate::algo_lib::numbers::real::Real;
pub fn canonize_angle(angle: Real) -> Real {
canonize_angle_base(angle, Real::zero() - Real::PI)
}
pub fn canonize_angle_base(angle: Real, base: Real) -> Real {
let two = 2.;
let mut angle = angle;
while angle < base - Real::epsilon() {
angle += Real::PI * two;
}
while angle > base + Real::PI * two - Real::epsilon() {
angle -= Real::PI * two;
}
angle
}
}
pub mod line {
use crate::algo_lib::geometry::base::Base;
use crate::algo_lib::geometry::point::Point;
use crate::algo_lib::numbers::num_traits::algebra::Field;
use crate::algo_lib::numbers::real::IntoReal;
use crate::algo_lib::numbers::real::Real;
use std::any::Any;
use std::any::TypeId;
#[derive(Copy, Clone, Ord, PartialOrd, Hash)]
#[allow(clippy::derived_hash_with_manual_eq)]
pub struct Line<T: Base> {
pub a: T,
pub b: T,
pub c: T,
}
impl<T: Base> Line<T> {
pub fn new(a: T, b: T, c: T) -> Self {
if a.type_id() == TypeId::of::<Real>() {
let a = *(&a as &dyn Any).downcast_ref::<Real>().unwrap();
let b = *(&b as &dyn Any).downcast_ref::<Real>().unwrap();
let c = *(&c as &dyn Any).downcast_ref::<Real>().unwrap();
let h = Real::hypot(a, b);
let a = a / h;
let b = b / h;
let c = c / h;
Self {
a: *(&a as &dyn Any).downcast_ref::<T>().unwrap(),
b: *(&b as &dyn Any).downcast_ref::<T>().unwrap(),
c: *(&c as &dyn Any).downcast_ref::<T>().unwrap(),
}
} else {
Self { a, b, c }
}
}
}
impl<T: Base> Line<T> {
pub fn value(&self, p: Point<T>) -> T {
self.a * p.x + self.b * p.y + self.c
}
pub fn parallel(&self, p: Point<T>) -> Line<T> {
Line::new(self.a, self.b, T::zero() - self.a * p.x - self.b * p.y)
}
pub fn perpendicular(&self, p: Point<T>) -> Line<T> {
Line::new(-self.b, self.a, self.b * p.x - self.a * p.y)
}
pub fn is_parallel(&self, other: Line<T>) -> bool {
self.a * other.b == self.b * other.a
}
pub fn is_perpendicular(&self, other: Line<T>) -> bool {
self.a * other.a + self.b * other.b == T::zero()
}
}
impl<T: Base> Eq for Line<T> {}
impl<T: Base> PartialEq for Line<T> {
fn eq(&self, other: &Self) -> bool {
self.a * other.b == self.b * other.a && self.b * other.c == self.c * other.b
}
}
impl<T: Field + Base> Line<T> {
pub fn intersect(&self, other: Line<T>) -> Point<T> {
let det = self.a * other.b - other.a * self.b;
let x = (self.b * other.c - other.b * self.c) / det;
let y = (other.a * self.c - self.a * other.c) / det;
Point::new(x, y)
}
pub fn square_dist_point(&self, p: Point<T>) -> T {
let val = self.value(p);
val * val / (self.a * self.a + self.b * self.b)
}
}
impl<T: Field + Base + IntoReal> Line<T> {
pub fn dist_point(&self, p: Point<T>) -> Real {
self.square_dist_point(p).into_real().sqrt()
}
}
impl<T: Base + PartialEq> Line<T> {
pub fn contains(&self, p: Point<T>) -> bool {
self.value(p) == T::zero()
}
}
}
pub mod point {
use crate::algo_lib::geometry::base::Base;
use crate::algo_lib::geometry::geometry_utils::canonize_angle;
use crate::algo_lib::geometry::line::Line;
use crate::algo_lib::io::input::Input;
use crate::algo_lib::io::input::Readable;
use crate::algo_lib::io::output::Output;
use crate::algo_lib::io::output::Writable;
use crate::algo_lib::numbers::num_traits::algebra::Zero;
use crate::algo_lib::numbers::real::IntoReal;
use crate::algo_lib::numbers::real::Real;
use std::ops::Add;
use std::ops::AddAssign;
use std::ops::Div;
use std::ops::DivAssign;
use std::ops::Mul;
use std::ops::MulAssign;
use std::ops::Sub;
use std::ops::SubAssign;
#[derive(Copy, Clone, Hash, Ord, PartialOrd, Eq, PartialEq)]
pub struct Point<T> {
pub x: T,
pub y: T,
}
impl<T> Point<T> {
pub fn new(x: T, y: T) -> Self {
Self { x, y }
}
}
impl<T: Zero> Point<T> {
pub fn origin() -> Self {
Self::new(T::zero(), T::zero())
}
}
impl<T: Base> Point<T> {
pub fn square_dist_point(&self, p: Self) -> T {
let delta = *self - p;
delta * delta
}
pub fn line(&self, p: Self) -> Line<T> {
let a = self.y - p.y;
let b = p.x - self.x;
Line::new(a, b, T::zero() - a * self.x - b * self.y)
}
pub(crate) fn value_square(&self) -> T {
*self * *self
}
}
impl<T: Base + IntoReal> Point<T> {
pub fn dist_point(&self, p: Self) -> Real {
self.square_dist_point(p).into_real().sqrt()
}
}
impl Point<Real> {
pub fn from_polar(r: Real, alpha: Real) -> Self {
Self::new(r * alpha.cos(), r * alpha.sin())
}
pub fn angle(&self) -> Real {
Real::atan2(self.y, self.x)
}
pub fn angle_to(&self, p: Self) -> Real {
canonize_angle(p.angle() - self.angle()).abs()
}
pub fn value(&self) -> Real {
Real::hypot(self.x, self.y)
}
}
impl<T: AddAssign> Add for Point<T> {
type Output = Point<T>;
fn add(mut self, rhs: Self) -> Self::Output {
self += rhs;
self
}
}
impl<T: AddAssign> AddAssign for Point<T> {
fn add_assign(&mut self, rhs: Self) {
self.x += rhs.x;
self.y += rhs.y;
}
}
impl<T: SubAssign> Sub for Point<T> {
type Output = Point<T>;
fn sub(mut self, rhs: Self) -> Self::Output {
self -= rhs;
self
}
}
impl<T: SubAssign> SubAssign for Point<T> {
fn sub_assign(&mut self, rhs: Self) {
self.x -= rhs.x;
self.y -= rhs.y;
}
}
impl<T: MulAssign + Copy> MulAssign<T> for Point<T> {
fn mul_assign(&mut self, rhs: T) {
self.x *= rhs;
self.y *= rhs;
}
}
impl<T: MulAssign + Copy> Mul<T> for Point<T> {
type Output = Point<T>;
fn mul(mut self, rhs: T) -> Self::Output {
self *= rhs;
self
}
}
impl<T: DivAssign + Copy> DivAssign<T> for Point<T> {
fn div_assign(&mut self, rhs: T) {
self.x /= rhs;
self.y /= rhs;
}
}
impl<T: DivAssign + Copy> Div<T> for Point<T> {
type Output = Point<T>;
fn div(mut self, rhs: T) -> Self::Output {
self /= rhs;
self
}
}
impl<T: Mul<Output = U>, U: Add> Mul for Point<T> {
type Output = U::Output;
fn mul(self, rhs: Self) -> Self::Output {
self.x * rhs.x + self.y * rhs.y
}
}
impl<T: Writable> Writable for Point<T> {
fn write(&self, output: &mut Output) {
self.x.write(output);
' '.write(output);
self.y.write(output);
}
}
impl<T: Readable> Readable for Point<T> {
fn read(input: &mut Input) -> Self {
let x = input.read();
let y = input.read();
Self::new(x, y)
}
}
}
pub mod ray {
use crate::algo_lib::geometry::base::Base;
use crate::algo_lib::geometry::line::Line;
use crate::algo_lib::geometry::point::Point;
use crate::algo_lib::numbers::num_traits::algebra::Field;
use crate::algo_lib::numbers::num_traits::algebra::One;
use crate::algo_lib::numbers::real::IntoReal;
use crate::algo_lib::numbers::real::Real;
pub struct Ray<T> {
pub origin: Point<T>,
pub direction: Point<T>,
}
impl<T> Ray<T> {
pub fn new(origin: Point<T>, direction: Point<T>) -> Self {
Self { origin, direction }
}
}
impl<T: Base> Ray<T> {
pub fn line(&self) -> Line<T> {
self.origin.line(self.direction)
}
}
impl<T: Base + Ord> Ray<T> {
pub fn contains(&self, p: Point<T>) -> bool {
if p == self.origin {
return true;
}
let line = self.line();
if !line.contains(p) {
return false;
}
if self.direction.x != self.origin.x
&& (p.x > self.origin.x) != (self.direction.x > self.origin.x)
{
return false;
}
if self.direction.y != self.origin.y
&& (p.y > self.origin.y) != (self.direction.y > self.origin.y)
{
return false;
}
true
}
}
impl<T: Field + Base + Ord> Ray<T> {
pub fn intersect_ray(&self, other: Self) -> Option<Point<T>> {
let l1 = self.line();
let l2 = other.line();
if l1.is_parallel(l2) {
return None;
}
let p = l1.intersect(l2);
if self.contains(p) && other.contains(p) {
Some(p)
} else {
None
}
}
pub fn square_dist_point(&self, p: Point<T>) -> T {
let line = self.line();
let perp = line.perpendicular(p);
let pp = line.intersect(perp);
if self.contains(pp) {
pp.square_dist_point(p)
} else {
self.origin.square_dist_point(p)
}
}
}
impl<T: Field + Base + Ord + IntoReal> Ray<T> {
pub fn dist_point(&self, p: Point<T>) -> Real {
self.square_dist_point(p).into_real().sqrt()
}
}
impl Ray<Real> {
pub fn angle(&self) -> Real {
(self.direction - self.origin).angle()
}
pub fn from_angle(origin: Point<Real>, angle: Real) -> Self {
Self::new(origin, origin + Point::from_polar(Real::one(), angle))
}
}
}
}
pub mod io {
pub mod input {
use crate::algo_lib::collections::vec_ext::default::default_vec;
use std::io::Read;
pub struct Input<'s> {
input: &'s mut (dyn Read + Send),
buf: Vec<u8>,
at: usize,
buf_read: usize,
}
macro_rules! read_impl {
($t: ty, $read_name: ident, $read_vec_name: ident) => {
pub fn $read_name(&mut self) -> $t {
self.read()
}
pub fn $read_vec_name(&mut self, len: usize) -> Vec<$t> {
self.read_vec(len)
}
};
($t: ty, $read_name: ident, $read_vec_name: ident, $read_pair_vec_name: ident) => {
read_impl!($t, $read_name, $read_vec_name);
pub fn $read_pair_vec_name(&mut self, len: usize) -> Vec<($t, $t)> {
self.read_vec(len)
}
};
}
impl<'s> Input<'s> {
const DEFAULT_BUF_SIZE: usize = 4096;
pub fn new(input: &'s mut (dyn Read + Send)) -> Self {
Self {
input,
buf: default_vec(Self::DEFAULT_BUF_SIZE),
at: 0,
buf_read: 0,
}
}
pub fn new_with_size(input: &'s mut (dyn Read + Send), buf_size: usize) -> Self {
Self {
input,
buf: default_vec(buf_size),
at: 0,
buf_read: 0,
}
}
pub fn get(&mut self) -> Option<u8> {
if self.refill_buffer() {
let res = self.buf[self.at];
self.at += 1;
if res == b'\r' {
if self.refill_buffer() && self.buf[self.at] == b'\n' {
self.at += 1;
}
return Some(b'\n');
}
Some(res)
} else {
None
}
}
pub fn peek(&mut self) -> Option<u8> {
if self.refill_buffer() {
let res = self.buf[self.at];
Some(if res == b'\r' { b'\n' } else { res })
} else {
None
}
}
pub fn skip_whitespace(&mut self) {
while let Some(b) = self.peek() {
if !b.is_ascii_whitespace() {
return;
}
self.get();
}
}
pub fn next_token(&mut self) -> Option<Vec<u8>> {
self.skip_whitespace();
let mut res = Vec::new();
while let Some(c) = self.get() {
if c.is_ascii_whitespace() {
break;
}
res.push(c);
}
if res.is_empty() {
None
} else {
Some(res)
}
}
//noinspection RsSelfConvention
pub fn is_exhausted(&mut self) -> bool {
self.peek().is_none()
}
//noinspection RsSelfConvention
pub fn is_empty(&mut self) -> bool {
self.skip_whitespace();
self.is_exhausted()
}
pub fn read<T: Readable>(&mut self) -> T {
T::read(self)
}
pub fn read_vec<T: Readable>(&mut self, size: usize) -> Vec<T> {
let mut res = Vec::with_capacity(size);
for _ in 0..size {
res.push(self.read());
}
res
}
pub fn read_char(&mut self) -> u8 {
self.skip_whitespace();
self.get().unwrap()
}
read_impl!(u32, read_unsigned, read_unsigned_vec);
read_impl!(u64, read_u64, read_u64_vec);
read_impl!(usize, read_size, read_size_vec, read_size_pair_vec);
read_impl!(i32, read_int, read_int_vec, read_int_pair_vec);
read_impl!(i64, read_long, read_long_vec, read_long_pair_vec);
read_impl!(i128, read_i128, read_i128_vec);
fn refill_buffer(&mut self) -> bool {
if self.at == self.buf_read {
self.at = 0;
self.buf_read = self.input.read(&mut self.buf).unwrap();
self.buf_read != 0
} else {
true
}
}
}
pub trait Readable {
fn read(input: &mut Input) -> Self;
}
impl Readable for u8 {
fn read(input: &mut Input) -> Self {
input.read_char()
}
}
impl<T: Readable> Readable for Vec<T> {
fn read(input: &mut Input) -> Self {
let size = input.read();
input.read_vec(size)
}
}
macro_rules! read_integer {
($($t:ident)+) => {$(
impl Readable for $t {
fn read(input: &mut Input) -> Self {
input.skip_whitespace();
let mut c = input.get().unwrap();
let sgn = match c {
b'-' => {
c = input.get().unwrap();
true
}
b'+' => {
c = input.get().unwrap();
false
}
_ => false,
};
let mut res = 0;
loop {
assert!(c.is_ascii_digit());
res *= 10;
let d = (c - b'0') as $t;
if sgn {
res -= d;
} else {
res += d;
}
match input.get() {
None => break,
Some(ch) => {
if ch.is_ascii_whitespace() {
break;
} else {
c = ch;
}
}
}
}
res
}
}
)+};
}
read_integer!(i8 i16 i32 i64 i128 isize u16 u32 u64 u128 usize);
macro_rules! tuple_readable {
($($name:ident)+) => {
impl<$($name: Readable), +> Readable for ($($name,)+) {
fn read(input: &mut Input) -> Self {
($($name::read(input),)+)
}
}
}
}
tuple_readable! {T}
tuple_readable! {T U}
tuple_readable! {T U V}
tuple_readable! {T U V X}
tuple_readable! {T U V X Y}
tuple_readable! {T U V X Y Z}
tuple_readable! {T U V X Y Z A}
tuple_readable! {T U V X Y Z A B}
tuple_readable! {T U V X Y Z A B C}
tuple_readable! {T U V X Y Z A B C D}
tuple_readable! {T U V X Y Z A B C D E}
tuple_readable! {T U V X Y Z A B C D E F}
impl Read for Input<'_> {
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
if self.at == self.buf_read {
self.input.read(buf)
} else {
let mut i = 0;
while i < buf.len() && self.at < self.buf_read {
buf[i] = self.buf[self.at];
i += 1;
self.at += 1;
}
Ok(i)
}
}
}
}
pub mod output {
use crate::algo_lib::collections::vec_ext::default::default_vec;
use std::cmp::Reverse;
use std::io::stderr;
use std::io::Stderr;
use std::io::Write;
#[derive(Copy, Clone)]
pub enum BoolOutput {
YesNo,
YesNoCaps,
PossibleImpossible,
Custom(&'static str, &'static str),
}
impl BoolOutput {
pub fn output(&self, output: &mut Output, val: bool) {
(if val { self.yes() } else { self.no() }).write(output);
}
fn yes(&self) -> &str {
match self {
BoolOutput::YesNo => "Yes",
BoolOutput::YesNoCaps => "YES",
BoolOutput::PossibleImpossible => "Possible",
BoolOutput::Custom(yes, _) => yes,
}
}
fn no(&self) -> &str {
match self {
BoolOutput::YesNo => "No",
BoolOutput::YesNoCaps => "NO",
BoolOutput::PossibleImpossible => "Impossible",
BoolOutput::Custom(_, no) => no,
}
}
}
pub struct Output<'s> {
output: &'s mut dyn Write,
buf: Vec<u8>,
at: usize,
auto_flush: bool,
bool_output: BoolOutput,
precision: Option<usize>,
}
impl<'s> Output<'s> {
const DEFAULT_BUF_SIZE: usize = 4096;
pub fn new(output: &'s mut dyn Write) -> Self {
Self {
output,
buf: default_vec(Self::DEFAULT_BUF_SIZE),
at: 0,
auto_flush: false,
bool_output: BoolOutput::YesNoCaps,
precision: None,
}
}
pub fn new_with_auto_flush(output: &'s mut dyn Write) -> Self {
Self {
output,
buf: default_vec(Self::DEFAULT_BUF_SIZE),
at: 0,
auto_flush: true,
bool_output: BoolOutput::YesNoCaps,
precision: None,
}
}
pub fn flush(&mut self) {
if self.at != 0 {
self.output.write_all(&self.buf[..self.at]).unwrap();
self.output.flush().unwrap();
self.at = 0;
}
}
pub fn print<T: Writable>(&mut self, s: T) {
s.write(self);
self.maybe_flush();
}
pub fn print_line<T: Writable>(&mut self, s: T) {
self.print(s);
self.put(b'\n');
self.maybe_flush();
}
pub fn put(&mut self, b: u8) {
self.buf[self.at] = b;
self.at += 1;
if self.at == self.buf.len() {
self.flush();
}
}
pub fn maybe_flush(&mut self) {
if self.auto_flush {
self.flush();
}
}
pub fn print_per_line<T: Writable>(&mut self, arg: &[T]) {
self.print_per_line_iter(arg.iter());
}
pub fn print_iter<T: Writable, I: Iterator<Item = T>>(&mut self, iter: I) {
let mut first = true;
for e in iter {
if first {
first = false;
} else {
self.put(b' ');
}
e.write(self);
}
}
pub fn print_line_iter<T: Writable, I: Iterator<Item = T>>(&mut self, iter: I) {
self.print_iter(iter);
self.put(b'\n');
}
pub fn print_per_line_iter<T: Writable, I: Iterator<Item = T>>(&mut self, iter: I) {
for e in iter {
e.write(self);
self.put(b'\n');
}
}
pub fn set_bool_output(&mut self, bool_output: BoolOutput) {
self.bool_output = bool_output;
}
pub fn set_precision(&mut self, precision: Option<usize>) {
self.precision = precision;
}
pub fn get_precision(&self) -> Option<usize> {
self.precision
}
}
impl Write for Output<'_> {
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
let mut start = 0usize;
let mut rem = buf.len();
while rem > 0 {
let len = (self.buf.len() - self.at).min(rem);
self.buf[self.at..self.at + len].copy_from_slice(&buf[start..start + len]);
self.at += len;
if self.at == self.buf.len() {
self.flush();
}
start += len;
rem -= len;
}
self.maybe_flush();
Ok(buf.len())
}
fn flush(&mut self) -> std::io::Result<()> {
self.flush();
Ok(())
}
}
pub trait Writable {
fn write(&self, output: &mut Output);
}
impl Writable for &str {
fn write(&self, output: &mut Output) {
output.write_all(self.as_bytes()).unwrap();
}
}
impl Writable for String {
fn write(&self, output: &mut Output) {
output.write_all(self.as_bytes()).unwrap();
}
}
impl Writable for char {
fn write(&self, output: &mut Output) {
output.put(*self as u8);
}
}
impl Writable for u8 {
fn write(&self, output: &mut Output) {
output.put(*self);
}
}
impl<T: Writable> Writable for [T] {
fn write(&self, output: &mut Output) {
output.print_iter(self.iter());
}
}
impl<T: Writable, const N: usize> Writable for [T; N] {
fn write(&self, output: &mut Output) {
output.print_iter(self.iter());
}
}
impl<T: Writable + ?Sized> Writable for &T {
fn write(&self, output: &mut Output) {
T::write(self, output)
}
}
impl<T: Writable> Writable for Vec<T> {
fn write(&self, output: &mut Output) {
self.as_slice().write(output);
}
}
impl Writable for () {
fn write(&self, _output: &mut Output) {}
}
macro_rules! write_to_string {
($($t:ident)+) => {$(
impl Writable for $t {
fn write(&self, output: &mut Output) {
self.to_string().write(output);
}
}
)+};
}
write_to_string!(u16 u32 u64 u128 usize i8 i16 i32 i64 i128 isize);
macro_rules! tuple_writable {
($name0:ident $($name:ident: $id:tt )*) => {
impl<$name0: Writable, $($name: Writable,)*> Writable for ($name0, $($name,)*) {
fn write(&self, out: &mut Output) {
self.0.write(out);
$(
out.put(b' ');
self.$id.write(out);
)*
}
}
}
}
tuple_writable! {T}
tuple_writable! {T U:1}
tuple_writable! {T U:1 V:2}
tuple_writable! {T U:1 V:2 X:3}
tuple_writable! {T U:1 V:2 X:3 Y:4}
tuple_writable! {T U:1 V:2 X:3 Y:4 Z:5}
tuple_writable! {T U:1 V:2 X:3 Y:4 Z:5 A:6}
tuple_writable! {T U:1 V:2 X:3 Y:4 Z:5 A:6 B:7}
tuple_writable! {T U:1 V:2 X:3 Y:4 Z:5 A:6 B:7 C:8}
impl<T: Writable> Writable for Option<T> {
fn write(&self, output: &mut Output) {
match self {
None => (-1).write(output),
Some(t) => t.write(output),
}
}
}
impl Writable for bool {
fn write(&self, output: &mut Output) {
let bool_output = output.bool_output;
bool_output.output(output, *self)
}
}
impl<T: Writable> Writable for Reverse<T> {
fn write(&self, output: &mut Output) {
self.0.write(output);
}
}
static mut ERR: Option<Stderr> = None;
pub fn err() -> Output<'static> {
unsafe {
if ERR.is_none() {
ERR = Some(stderr());
}
Output::new_with_auto_flush(ERR.as_mut().unwrap())
}
}
}
}
pub mod misc {
pub mod test_type {
pub enum TestType {
Single,
MultiNumber,
MultiEof,
}
pub enum TaskType {
Classic,
Interactive,
}
}
}
pub mod numbers {
pub mod num_traits {
pub mod algebra {
use crate::algo_lib::numbers::num_traits::invertible::Invertible;
use std::ops::Add;
use std::ops::AddAssign;
use std::ops::Div;
use std::ops::DivAssign;
use std::ops::Mul;
use std::ops::MulAssign;
use std::ops::Neg;
use std::ops::Rem;
use std::ops::RemAssign;
use std::ops::Sub;
use std::ops::SubAssign;
pub trait Zero {
fn zero() -> Self;
}
pub trait One {
fn one() -> Self;
}
pub trait AdditionMonoid: Add<Output = Self> + AddAssign + Zero + Eq + Sized {}
impl<T: Add<Output = Self> + AddAssign + Zero + Eq> AdditionMonoid for T {}
pub trait AdditionMonoidWithSub: AdditionMonoid + Sub<Output = Self> + SubAssign {}
impl<T: AdditionMonoid + Sub<Output = Self> + SubAssign> AdditionMonoidWithSub for T {}
pub trait AdditionGroup: AdditionMonoidWithSub + Neg<Output = Self> {}
impl<T: AdditionMonoidWithSub + Neg<Output = Self>> AdditionGroup for T {}
pub trait MultiplicationMonoid: Mul<Output = Self> + MulAssign + One + Eq + Sized {}
impl<T: Mul<Output = Self> + MulAssign + One + Eq> MultiplicationMonoid for T {}
pub trait IntegerMultiplicationMonoid:
MultiplicationMonoid + Div<Output = Self> + Rem<Output = Self> + DivAssign + RemAssign
{
}
impl<T: MultiplicationMonoid + Div<Output = Self> + Rem<Output = Self> + DivAssign + RemAssign>
IntegerMultiplicationMonoid for T
{
}
pub trait MultiplicationGroup:
MultiplicationMonoid + Div<Output = Self> + DivAssign + Invertible<Output = Self>
{
}
impl<T: MultiplicationMonoid + Div<Output = Self> + DivAssign + Invertible<Output = Self>>
MultiplicationGroup for T
{
}
pub trait SemiRing: AdditionMonoid + MultiplicationMonoid {}
impl<T: AdditionMonoid + MultiplicationMonoid> SemiRing for T {}
pub trait SemiRingWithSub: AdditionMonoidWithSub + SemiRing {}
impl<T: AdditionMonoidWithSub + SemiRing> SemiRingWithSub for T {}
pub trait Ring: SemiRing + AdditionGroup {}
impl<T: SemiRing + AdditionGroup> Ring for T {}
pub trait IntegerSemiRing: SemiRing + IntegerMultiplicationMonoid {}
impl<T: SemiRing + IntegerMultiplicationMonoid> IntegerSemiRing for T {}
pub trait IntegerSemiRingWithSub: SemiRingWithSub + IntegerSemiRing {}
impl<T: SemiRingWithSub + IntegerSemiRing> IntegerSemiRingWithSub for T {}
pub trait IntegerRing: IntegerSemiRing + Ring {}
impl<T: IntegerSemiRing + Ring> IntegerRing for T {}
pub trait Field: Ring + MultiplicationGroup {}
impl<T: Ring + MultiplicationGroup> Field for T {}
macro_rules! zero_one_integer_impl {
($($t: ident)+) => {$(
impl Zero for $t {
fn zero() -> Self {
0
}
}
impl One for $t {
fn one() -> Self {
1
}
}
)+};
}
zero_one_integer_impl!(i128 i64 i32 i16 i8 isize u128 u64 u32 u16 u8 usize);
}
pub mod invertible {
pub trait Invertible {
type Output;
fn inv(&self) -> Option<Self::Output>;
}
}
}
pub mod real {
use crate::algo_lib::collections::iter_ext::find_count::IterFindCount;
use crate::algo_lib::io::input::Input;
use crate::algo_lib::io::input::Readable;
use crate::algo_lib::io::output::Output;
use crate::algo_lib::io::output::Writable;
use crate::algo_lib::numbers::num_traits::algebra::One;
use crate::algo_lib::numbers::num_traits::algebra::Zero;
use crate::algo_lib::numbers::num_traits::invertible::Invertible;
use std::cmp::Ordering;
use std::ops::Add;
use std::ops::AddAssign;
use std::ops::Deref;
use std::ops::DerefMut;
use std::ops::Div;
use std::ops::DivAssign;
use std::ops::Mul;
use std::ops::MulAssign;
use std::ops::Neg;
use std::ops::Sub;
use std::ops::SubAssign;
#[derive(Copy, Clone, Debug, Default)]
pub struct Real(pub f64);
impl Real {
pub fn round(&self) -> i64 {
self.0.round() as i64
}
pub fn ceil(&self) -> i64 {
self.0.ceil() as i64
}
pub fn floor(&self) -> i64 {
self.0.floor() as i64
}
pub fn with_precision(&self, precision: usize) -> String {
let res = format!("{:.*}", precision, self.0);
if res.starts_with('-') && res.chars().count_eq(&'0') == precision + 1 {
res[1..].to_string()
} else {
res
}
}
}
#[allow(clippy::non_canonical_partial_ord_impl)]
impl PartialOrd for Real {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
if self == other {
Some(Ordering::Equal)
} else if self.0 < other.0 {
Some(Ordering::Less)
} else {
Some(Ordering::Greater)
}
}
}
impl PartialOrd<f64> for Real {
fn partial_cmp(&self, other: &f64) -> Option<Ordering> {
self.partial_cmp(&Real(*other))
}
}
impl PartialOrd<Real> for f64 {
fn partial_cmp(&self, other: &Real) -> Option<Ordering> {
Real(*self).partial_cmp(other)
}
}
impl PartialEq<f64> for Real {
fn eq(&self, other: &f64) -> bool {
self.eq(&Real(*other))
}
}
impl PartialEq<Real> for f64 {
fn eq(&self, other: &Real) -> bool {
Real(*self).eq(other)
}
}
impl PartialEq for Real {
fn eq(&self, other: &Self) -> bool {
(self.0 - other.0).abs() < Real::epsilon().0
}
}
impl Eq for Real {}
impl Ord for Real {
fn cmp(&self, other: &Self) -> Ordering {
self.partial_cmp(other).unwrap()
}
}
impl AddAssign for Real {
fn add_assign(&mut self, rhs: Self) {
self.0 += rhs.0;
}
}
impl AddAssign<f64> for Real {
fn add_assign(&mut self, rhs: f64) {
self.0 += rhs;
}
}
impl Add for Real {
type Output = Self;
fn add(mut self, rhs: Self) -> Self::Output {
self += rhs;
self
}
}
impl Add<f64> for Real {
type Output = Self;
fn add(mut self, rhs: f64) -> Self::Output {
self += rhs;
self
}
}
impl Add<Real> for f64 {
type Output = Real;
fn add(self, rhs: Real) -> Self::Output {
Real(self + rhs.0)
}
}
impl SubAssign for Real {
fn sub_assign(&mut self, rhs: Self) {
self.0 -= rhs.0;
}
}
impl SubAssign<f64> for Real {
fn sub_assign(&mut self, rhs: f64) {
self.0 -= rhs;
}
}
impl Sub for Real {
type Output = Self;
fn sub(mut self, rhs: Self) -> Self::Output {
self -= rhs;
self
}
}
impl Sub<f64> for Real {
type Output = Self;
fn sub(mut self, rhs: f64) -> Self::Output {
self -= rhs;
self
}
}
impl Sub<Real> for f64 {
type Output = Real;
fn sub(self, rhs: Real) -> Self::Output {
Real(self - rhs.0)
}
}
impl MulAssign for Real {
fn mul_assign(&mut self, rhs: Self) {
self.0 *= rhs.0;
}
}
impl MulAssign<f64> for Real {
fn mul_assign(&mut self, rhs: f64) {
self.0 *= rhs;
}
}
impl Mul for Real {
type Output = Self;
fn mul(mut self, rhs: Self) -> Self::Output {
self.0 *= rhs.0;
self
}
}
impl Mul<f64> for Real {
type Output = Self;
fn mul(mut self, rhs: f64) -> Self::Output {
self.0 *= rhs;
self
}
}
impl Mul<Real> for f64 {
type Output = Real;
fn mul(self, rhs: Real) -> Self::Output {
Real(self * rhs.0)
}
}
impl DivAssign for Real {
fn div_assign(&mut self, rhs: Self) {
self.0 /= rhs.0;
}
}
impl DivAssign<f64> for Real {
fn div_assign(&mut self, rhs: f64) {
self.0 /= rhs;
}
}
impl Div for Real {
type Output = Self;
fn div(mut self, rhs: Self) -> Self::Output {
self /= rhs;
self
}
}
impl Div<f64> for Real {
type Output = Self;
fn div(mut self, rhs: f64) -> Self::Output {
self /= rhs;
self
}
}
impl Div<Real> for f64 {
type Output = Real;
fn div(self, rhs: Real) -> Self::Output {
Real(self / rhs.0)
}
}
impl Neg for Real {
type Output = Self;
fn neg(self) -> Self::Output {
Self(-self.0)
}
}
impl Zero for Real {
fn zero() -> Self {
Self(0.0)
}
}
impl One for Real {
fn one() -> Self {
Self(1.0)
}
}
static mut EPSILON: Real = Real(1e-9);
impl Real {
pub const PI: Self = Self(std::f64::consts::PI);
pub fn abs(&self) -> Self {
Self(self.0.abs())
}
pub fn sqrt(&self) -> Self {
Self(self.0.sqrt())
}
pub fn sin(&self) -> Self {
Self(self.0.sin())
}
pub fn cos(&self) -> Self {
Self(self.0.cos())
}
pub fn tan(&self) -> Self {
Self(self.0.tan())
}
pub fn hypot(x: Self, y: Self) -> Self {
Self(f64::hypot(x.0, y.0))
}
pub fn atan2(y: Self, x: Self) -> Self {
Self(f64::atan2(y.0, x.0))
}
pub fn epsilon() -> Self {
unsafe { EPSILON }
}
pub fn set_epsilon(eps: impl Into<Self>) {
unsafe {
EPSILON = eps.into();
}
}
}
impl Deref for Real {
type Target = f64;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for Real {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
impl Invertible for Real {
type Output = Self;
fn inv(&self) -> Option<Self::Output> {
if self == &Self::zero() {
None
} else {
Some(Self(1.0 / self.0))
}
}
}
impl Readable for Real {
fn read(input: &mut Input) -> Self {
Self(
String::from_utf8(input.next_token().unwrap())
.unwrap()
.parse()
.unwrap(),
)
}
}
impl Writable for Real {
fn write(&self, output: &mut Output) {
match output.get_precision() {
Some(precision) => {
self.with_precision(precision).write(output);
}
None => {
self.0.to_string().write(output);
}
}
}
}
pub trait RealReader {
fn read_real(&mut self) -> Real;
fn read_real_vec(&mut self, n: usize) -> Vec<Real>;
}
impl RealReader for Input<'_> {
fn read_real(&mut self) -> Real {
self.read()
}
fn read_real_vec(&mut self, n: usize) -> Vec<Real> {
self.read_vec(n)
}
}
pub trait IntoReal {
fn into_real(self) -> Real;
}
impl IntoReal for Real {
fn into_real(self) -> Real {
self
}
}
macro_rules! into_real {
($($t: ident)+) => {$(
impl IntoReal for $t {
fn into_real(self) -> Real {
Real(self as f64)
}
}
impl From<$t> for Real {
fn from(x: $t) -> Self {
Real(x as f64)
}
}
)+};
}
into_real!(u8 u16 u32 u64 u128 usize i8 i16 i32 i64 i128 isize f64);
}
}
}
fn main() {
let mut sin = std::io::stdin();
let input = algo_lib::io::input::Input::new(&mut sin);
let mut stdout = std::io::stdout();
let output = algo_lib::io::output::Output::new(&mut stdout);
solution::run(input, output);
}
这程序好像有点Bug,我给组数据试试?
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 2936kb
input:
3 1 0 1 1 1 2 2 1 2 2
output:
1
result:
ok found '1.0000000', expected '1.0000000', error '0.0000000'
Test #2:
score: 0
Accepted
time: 0ms
memory: 3056kb
input:
3 1 0 1 2 1 2 2 1 2 2
output:
1.5707963267948966
result:
ok found '1.5707963', expected '1.5707963', error '0.0000000'
Test #3:
score: 0
Accepted
time: 0ms
memory: 3052kb
input:
3 1 0 1 10000 1 2 2 1 2 2
output:
2500.7077522574978
result:
ok found '2500.7077523', expected '2500.7077523', error '0.0000000'
Test #4:
score: 0
Accepted
time: 0ms
memory: 2928kb
input:
3 10000 10000 1 10000 10000 9999 10000 10000 9999 10000
output:
0.3842413002902113
result:
ok found '0.3842413', expected '0.3842413', error '0.0000000'
Test #5:
score: 0
Accepted
time: 0ms
memory: 2840kb
input:
3 -10000 -10000 10000 10000 -10000 -9999 -10000 -10000 -9999 -10000
output:
2500.2406700095903
result:
ok found '2500.2406700', expected '2500.2406700', error '0.0000000'
Test #6:
score: 0
Accepted
time: 0ms
memory: 2824kb
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: 0ms
memory: 2952kb
input:
4 1 0 1 10000 -2 3300 -4 10000 -4 -10000 -2 -3300
output:
4999.200391854823
result:
ok found '4999.2003919', expected '4999.2003919', error '0.0000000'
Test #8:
score: 0
Accepted
time: 0ms
memory: 2856kb
input:
4 -3040 2716 2147 2 -9033 -8520 -8999 -8533 -8988 -8511 -9004 -8495
output:
0.3508300583420727
result:
ok found '0.3508301', expected '0.3508301', error '0.0000000'
Test #9:
score: 0
Accepted
time: 0ms
memory: 2916kb
input:
3 8168 -766 1549 1256 -3951 -6425 -3874 -6439 -3911 -6389
output:
84.83286116100709
result:
ok found '84.8328612', expected '84.8328612', error '0.0000000'
Test #10:
score: 0
Accepted
time: 0ms
memory: 2944kb
input:
8 2977 -3175 8766 2 -4868 7759 -4867 7925 -4867 7950 -4886 7952 -4979 7953 -5048 7877 -5003 7761 -4936 7759
output:
0.3278606469061085
result:
ok found '0.3278606', expected '0.3278606', error '0.0000000'
Test #11:
score: 0
Accepted
time: 0ms
memory: 2944kb
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.58962278468272
result:
ok found '153.5896228', expected '153.5896228', error '0.0000000'
Test #12:
score: 0
Accepted
time: 0ms
memory: 2860kb
input:
8 -9743 -7629 775 7 -194 981 -191 1720 -193 1845 -705 1929 -959 1950 -1131 1894 -1151 1604 -1031 1020
output:
2.046006204355634
result:
ok found '2.0460062', expected '2.0460062', error '0.0000000'
Test #13:
score: 0
Accepted
time: 0ms
memory: 2892kb
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.2411849637106
result:
ok found '822.2411850', expected '822.2411850', error '0.0000000'
Test #14:
score: 0
Accepted
time: 0ms
memory: 3052kb
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.0387653771390726
result:
ok found '3.0387654', expected '3.0387654', error '0.0000000'
Test #15:
score: 0
Accepted
time: 0ms
memory: 3076kb
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.4239690789389
result:
ok found '262.4239691', expected '262.4239691', error '0.0000000'
Test #16:
score: 0
Accepted
time: 0ms
memory: 2920kb
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
result:
ok found '0.0000000', expected '0.0000000', error '-0.0000000'
Test #17:
score: 0
Accepted
time: 0ms
memory: 2948kb
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.9667683478793
result:
ok found '758.9667683', expected '758.9667683', error '0.0000000'
Test #18:
score: 0
Accepted
time: 0ms
memory: 2948kb
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
result:
ok found '0.0000000', expected '0.0000000', error '-0.0000000'
Test #19:
score: 0
Accepted
time: 0ms
memory: 2956kb
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.311740079541
result:
ok found '3378.3117401', expected '3378.3117401', error '0.0000000'
Test #20:
score: 0
Accepted
time: 0ms
memory: 2896kb
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.268233383460395
result:
ok found '2.2682334', expected '2.2682334', error '0.0000000'
Test #21:
score: 0
Accepted
time: 0ms
memory: 2844kb
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.5591737069462
result:
ok found '3442.5591737', expected '3442.5591737', error '0.0000000'
Test #22:
score: 0
Accepted
time: 0ms
memory: 2944kb
input:
5 -7413 -6822 8371 4 -8435 1969 -8446 1918 -8438 1885 -8390 1892 -8422 1955
output:
0.3951577326793627
result:
ok found '0.3951577', expected '0.3951577', error '0.0000000'
Test #23:
score: 0
Accepted
time: 0ms
memory: 2860kb
input:
5 5998 6928 4304 9649 -9352 -3336 -9335 -3337 -9282 -3320 -9273 -3304 -9313 -3284
output:
1393.5958786548824
result:
ok found '1393.5958787', expected '1393.5958787', error '0.0000000'
Test #24:
score: 0
Accepted
time: 0ms
memory: 3076kb
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.2992360262844995
result:
ok found '3.2992360', expected '3.2992360', error '0.0000000'
Test #25:
score: 0
Accepted
time: 0ms
memory: 3076kb
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.39038059442095
result:
ok found '266.3903806', expected '266.3903806', error '0.0000000'
Test #26:
score: 0
Accepted
time: 0ms
memory: 2932kb
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.6678521023021808
result:
ok found '1.6678521', expected '1.6678521', error '0.0000000'
Test #27:
score: 0
Accepted
time: 0ms
memory: 2824kb
input:
8 -6347 -8448 6719 6605 3802 9434 3837 9059 4354 9016 4552 9221 4542 9631 4330 9896 4110 9896 3900 9862
output:
1615.078289969263
result:
ok found '1615.0782900', expected '1615.0782900', error '0.0000000'
Test #28:
score: 0
Accepted
time: 0ms
memory: 2912kb
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.39053934930667267
result:
ok found '0.3905393', expected '0.3905393', error '0.0000000'
Test #29:
score: 0
Accepted
time: 0ms
memory: 2932kb
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.3949232559198
result:
ok found '790.3949233', expected '790.3949233', error '0.0000000'
Test #30:
score: 0
Accepted
time: 0ms
memory: 2960kb
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.985626689512887
result:
ok found '4.9856267', expected '4.9856267', error '0.0000000'
Test #31:
score: 0
Accepted
time: 0ms
memory: 2852kb
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.028689684108
result:
ok found '2376.0286897', expected '2376.0286897', error '0.0000000'
Test #32:
score: 0
Accepted
time: 0ms
memory: 3064kb
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.5527082689070513
result:
ok found '0.5527083', expected '0.5527083', error '0.0000000'
Test #33:
score: 0
Accepted
time: 0ms
memory: 2908kb
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.408993754573
result:
ok found '2006.4089938', expected '2006.4089938', error '0.0000000'
Test #34:
score: 0
Accepted
time: 0ms
memory: 3064kb
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.169445755261382
result:
ok found '2.1694458', expected '2.1694458', error '0.0000000'
Test #35:
score: 0
Accepted
time: 0ms
memory: 2896kb
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:
2664.374010669135
result:
ok found '2664.3740107', expected '2664.3740107', error '0.0000000'
Test #36:
score: 0
Accepted
time: 0ms
memory: 2956kb
input:
5 2638 -4463 7250 10 -6121 4256 -6123 4245 -6100 4200 -6026 4229 -6068 4291
output:
4.3389197045843
result:
ok found '4.3389197', expected '4.3389197', error '0.0000000'
Test #37:
score: 0
Accepted
time: 0ms
memory: 2824kb
input:
4 9037 -7470 4708 5338 307 6249 341 6173 391 6245 322 6264
output:
1471.6009272703184
result:
ok found '1471.6009273', expected '1471.6009273', error '0.0000000'
Test #38:
score: 0
Accepted
time: 0ms
memory: 2840kb
input:
36 3764 6801 4323 8 -7120 -4568 -7129 -4567 -7146 -4567 -7151 -4568 -7192 -4583 -7200 -4589 -7206 -4594 -7219 -4609 -7225 -4619 -7228 -4625 -7234 -4645 -7236 -4653 -7236 -4677 -7233 -4692 -7229 -4703 -7210 -4733 -7187 -4752 -7171 -4759 -7154 -4764 -7143 -4765 -7107 -4761 -7104 -4760 -7093 -4755 -708...
output:
1.0900475440839013
result:
ok found '1.0900475', expected '1.0900475', error '0.0000000'
Test #39:
score: 0
Accepted
time: 0ms
memory: 2912kb
input:
35 -5028 9347 1180 2618 9370 8586 9398 8567 9403 8565 9417 8561 9426 8559 9437 8559 9495 8576 9514 8594 9524 8608 9530 8620 9536 8639 9537 8649 9537 8659 9533 8688 9520 8714 9499 8736 9493 8741 9481 8748 9476 8750 9455 8756 9421 8756 9413 8754 9393 8747 9372 8733 9361 8721 9357 8716 9352 8708 9348 8...
output:
83.26308591516818
result:
ok found '83.2630859', expected '83.2630859', error '0.0000000'
Test #40:
score: 0
Accepted
time: 0ms
memory: 2952kb
input:
45 -6843 -8564 8658 4 7836 -6692 7842 -6709 7932 -6858 7951 -6879 8093 -6981 8149 -7004 8155 -7006 8226 -7024 8296 -7030 8458 -7007 8504 -6991 8555 -6965 8602 -6935 8666 -6880 8673 -6873 8723 -6810 8733 -6795 8756 -6753 8783 -6687 8786 -6679 8787 -6676 8799 -6626 8804 -6598 8808 -6514 8797 -6424 879...
output:
2.090967740985007
result:
ok found '2.0909677', expected '2.0909677', error '0.0000000'
Test #41:
score: 0
Accepted
time: 0ms
memory: 2892kb
input:
46 -8269 7894 301 2780 6898 -4472 6908 -4463 6943 -4428 6980 -4382 6993 -4364 7071 -4134 7072 -4124 7072 -4067 7068 -4026 7063 -3994 7019 -3869 6923 -3737 6893 -3709 6831 -3665 6809 -3653 6681 -3605 6666 -3602 6622 -3596 6580 -3594 6521 -3596 6404 -3623 6354 -3644 6328 -3658 6272 -3695 6190 -3772 61...
output:
91.52348824425849
result:
ok found '91.5234882', expected '91.5234882', error '0.0000000'
Test #42:
score: 0
Accepted
time: 0ms
memory: 2836kb
input:
48 -252 983 5831 6 -5338 7492 -5368 7454 -5410 7392 -5433 7355 -5441 7340 -5485 7251 -5514 7175 -5552 7027 -5553 7020 -5565 6909 -5566 6833 -5561 6749 -5515 6541 -5504 6509 -5502 6504 -5325 6205 -5285 6161 -5272 6148 -5249 6126 -5147 6042 -5087 6003 -5069 5992 -4954 5935 -4926 5923 -4696 5865 -4692 ...
output:
1.6704668680949426
result:
ok found '1.6704669', expected '1.6704669', error '0.0000000'
Test #43:
score: 0
Accepted
time: 0ms
memory: 2824kb
input:
47 9429 -5628 7613 730 5762 6533 5787 6456 5889 6255 5959 6161 5974 6143 6148 5987 6233 5934 6539 5822 6646 5808 6670 5806 6835 5811 6896 5820 7061 5863 7281 5974 7432 6099 7501 6176 7559 6255 7649 6425 7657 6445 7708 6631 7723 6760 7723 6828 7666 7137 7593 7297 7584 7313 7534 7389 7358 7577 7280 76...
output:
260.62067399017224
result:
ok found '260.6206740', expected '260.6206740', error '0.0000000'
Test #44:
score: 0
Accepted
time: 0ms
memory: 2952kb
input:
100 -2137 931 2332 5 5880 -205 5950 -250 6222 -388 6257 -403 6345 -435 6421 -460 6503 -482 6587 -501 6632 -510 6756 -529 6838 -537 6889 -540 7289 -520 7398 -501 7505 -475 7596 -449 7624 -440 7647 -432 7816 -364 8029 -252 8052 -238 8217 -123 8277 -74 8406 44 8486 129 8550 205 8562 220 8730 470 8818 6...
output:
1.3027386395062153
result:
ok found '1.3027386', expected '1.3027386', error '0.0000000'
Test #45:
score: 0
Accepted
time: 0ms
memory: 2828kb
input:
100 5783 -862 898 1351 -6284 2487 -6240 2445 -6201 2410 -6141 2360 -6075 2310 -5935 2216 -5707 2095 -5507 2018 -5504 2017 -5393 1985 -5246 1952 -5042 1926 -4942 1921 -4835 1921 -4584 1944 -4539 1952 -4500 1959 -4471 1965 -4302 2009 -4122 2074 -3978 2141 -3905 2180 -3852 2211 -3772 2262 -3618 2377 -3...
output:
206.66751094910717
result:
ok found '206.6675109', expected '206.6675109', error '0.0000000'
Test #46:
score: 0
Accepted
time: 0ms
memory: 2916kb
input:
100 -2659 7645 1903 10 6882 1385 6772 1450 6598 1541 6538 1569 6180 1705 6087 1732 5852 1786 5726 1807 5651 1817 5513 1830 5449 1834 5221 1837 5054 1828 5041 1827 4601 1756 4258 1652 3912 1499 3500 1240 3381 1146 3349 1119 3209 992 3148 931 2905 648 2681 306 2655 259 2490 -104 2467 -167 2324 -761 23...
output:
2.9425298531903836
result:
ok found '2.9425299', expected '2.9425299', error '0.0000000'
Test #47:
score: 0
Accepted
time: 0ms
memory: 3092kb
input:
100 -4230 -5718 5152 1802 -4647 8707 -4898 8858 -4911 8865 -4971 8896 -5205 9001 -5481 9096 -5520 9107 -5546 9114 -5861 9180 -6520 9208 -6585 9203 -6595 9202 -6724 9187 -6785 9178 -6961 9145 -7132 9102 -7511 8967 -7620 8917 -7717 8868 -7943 8736 -8016 8687 -8052 8662 -8130 8605 -8309 8458 -8329 8440...
output:
669.5018053859253
result:
ok found '669.5018054', expected '669.5018054', error '0.0000000'
Test #48:
score: 0
Accepted
time: 0ms
memory: 2952kb
input:
100 -2000 -8717 1 2 -3887 -7882 -3085 -8035 -3036 -8039 -3022 -8040 -2351 -8031 -2056 -7991 -2039 -7988 -1788 -7935 -1648 -7898 -1182 -7734 -1009 -7656 -895 -7599 -872 -7587 -782 -7538 -754 -7522 -556 -7401 -293 -7214 -116 -7069 133 -6833 258 -6698 291 -6660 517 -6372 660 -6157 668 -6144 800 -5912 9...
output:
0.5889866078721222
result:
ok found '0.5889866', expected '0.5889866', error '0.0000000'
Test #49:
score: 0
Accepted
time: 0ms
memory: 2964kb
input:
100 -8471 -2641 1085 4758 -7454 -238 -7384 -290 -6801 -642 -6667 -705 -6251 -864 -5930 -952 -5657 -1005 -5624 -1010 -4751 -1044 -4605 -1031 -4596 -1030 -4476 -1015 -4435 -1009 -3688 -821 -3415 -712 -3355 -685 -2738 -330 -2604 -232 -2335 -7 -2159 164 -1872 495 -1759 648 -1750 661 -1593 905 -1398 1277...
output:
1599.7660698049788
result:
ok found '1599.7660698', expected '1599.7660698', error '0.0000000'
Test #50:
score: 0
Accepted
time: 0ms
memory: 2960kb
input:
100 8019 7414 959 2 266 5953 253 5916 164 5645 106 5452 38 5120 2 4933 -54 4332 -48 3976 -12 3565 42 3243 80 3065 139 2813 161 2745 208 2601 312 2303 382 2151 623 1672 719 1515 738 1484 992 1134 1431 632 1957 189 2419 -126 2540 -191 2980 -403 3346 -546 3365 -552 3681 -649 3957 -714 3968 -716 4391 -7...
output:
1.1226569888658826
result:
ok found '1.1226570', expected '1.1226570', error '0.0000000'
Test #51:
score: 0
Accepted
time: 0ms
memory: 2892kb
input:
100 9678 8745 355 2777 -9146 3450 -9132 3167 -9127 3123 -9032 2545 -8802 1776 -8561 1275 -8424 1029 -8155 620 -7675 65 -7606 -2 -7079 -440 -6742 -658 -6540 -777 -6271 -912 -6088 -997 -5926 -1058 -5688 -1144 -5410 -1215 -5033 -1309 -4636 -1360 -4465 -1370 -4220 -1383 -4187 -1383 -3965 -1381 -3842 -13...
output:
1179.778320902536
result:
ok found '1179.7783209', expected '1179.7783209', error '0.0000000'
Test #52:
score: 0
Accepted
time: 0ms
memory: 3140kb
input:
100 3624 3408 5 4 -7122 -6161 -6556 -6434 -6346 -6514 -6134 -6584 -5982 -6628 -5816 -6670 -5325 -6760 -5044 -6789 -4407 -6796 -4260 -6786 -4010 -6759 -3820 -6730 -3513 -6667 -3285 -6607 -3062 -6537 -3033 -6527 -2941 -6494 -2098 -6090 -1296 -5492 -963 -5157 -341 -4303 -253 -4144 -241 -4121 -62 -3741 ...
output:
2.785634268094828
result:
ok found '2.7856343', expected '2.7856343', error '0.0000000'
Test #53:
score: 0
Accepted
time: 0ms
memory: 2840kb
input:
100 -9963 7022 699 1618 -6958 -1122 -6918 -1141 -5908 -1486 -4633 -1606 -4297 -1583 -3704 -1486 -3434 -1417 -3279 -1370 -3200 -1344 -3154 -1328 -3020 -1279 -2966 -1258 -2707 -1147 -2660 -1125 -2391 -987 -2090 -807 -1389 -259 -1089 47 -716 515 -68 1794 -27 1921 30 2121 37 2148 68 2276 149 2722 184 30...
output:
678.4314433596567
result:
ok found '678.4314434', expected '678.4314434', error '0.0000000'
Extra Test:
score: 0
Extra Test Passed