QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#110518 | #6542. Optimal Quadratic Function | hjroh0315 | AC ✓ | 4152ms | 139224kb | C++20 | 33.1kb | 2023-06-02 18:15:02 | 2023-06-02 18:16:08 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define assert_msg(x,y) assert((x && y))
class Rng{
private:
static std::mt19937 engine;
public:
static std::mt19937& get_engine(){
return engine;
}
template<typename T>
static void set_seed(T const& seed){
engine = std::mt19937(seed);
}
static void timebased_seed(){
engine = std::mt19937(std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count());
}
template<typename T>
static typename std::enable_if<std::is_integral<T>::value, T>::type uniform(T l, T r){
return std::uniform_int_distribution<T>(l, r)(engine);
}
template<typename T>
static typename std::enable_if<std::is_floating_point<T>::value, T>::type uniform(T l, T r){
return std::uniform_real_distribution<T>(l, r)(engine);
}
};
std::mt19937 Rng::engine(std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count());
class Timer{
public:
template<typename S, typename T, typename... U>
static S execute_timed(T func, std::string const& name, U&&... u){
auto time_begin = std::chrono::high_resolution_clock::now();
S ret = func(std::forward<U>(u)...);
auto time_end = std::chrono::high_resolution_clock::now();
auto timespan = std::chrono::duration_cast<std::chrono::nanoseconds>(time_end - time_begin);
std::cerr << "Execution of '" << name << "' took " << std::fixed << std::setprecision(6) << timespan.count()*1e-9 << "\n";
return ret;
}
};
/**
* signed Bigint in base 10^18, used for Input / Output
* don't use for computations, doesn't support most operations
*
*/
class Bigint_base10{
public:
static constexpr int64_t BASE = 1e18;
static constexpr int DIGITS = 18;
private:
bool is_neg;
vector<int64_t> data;
public:
Bigint_base10():is_neg(false), data(1, 0){}
Bigint_base10(int64_t const&val):is_neg(val<0){
int64_t abs_val = abs(val);
if(abs_val < BASE){
data = {abs_val};
} else {
data = {abs_val%BASE, abs_val/BASE};
}
}
Bigint_base10 operator+(Bigint_base10 const&o)const{
assert_msg(is_neg == o.is_neg, "Addition operands need to have equal sign");
Bigint_base10 ret;
ret.is_neg = is_neg;
ret.data.assign(1+max(data.size(), o.data.size()), 0);
copy(data.begin(), data.end(), ret.data.begin());
int64_t carry = 0;
for(unsigned int i=0;i<o.data.size();++i){
ret.data[i]+=o.data[i] + carry;
carry = 0;
if(ret.data[i] >= BASE){
carry = 1;
ret.data[i]-=BASE;
}
}
for(unsigned int i=o.data.size();carry;++i){
ret.data[i]+=carry;
carry = 0;
if(ret.data[i] >= BASE){
carry = 1;
ret.data[i]-=BASE;
}
}
return ret.trim();
}
Bigint_base10 operator*(int64_t const&o)const{
if(o == 0){
return Bigint_base10(0);
}
if(o<0){
return operator*(-o).negate();
}
if(o&1){
return operator+(operator*(o-1));
}
return operator+(*this)*(o/2);
}
Bigint_base10& operator+=(Bigint_base10 const&o){
*this = operator+(o);
return *this;
}
Bigint_base10& operator*=(int64_t const&o){
*this = operator*(o);
return *this;
}
Bigint_base10& trim(){
while(data.size()>1 && data.back() == 0){
data.pop_back();
}
return *this;
}
bool is_zero()const{
for(auto const&e:data) if(e) return false;
return true;
}
Bigint_base10& negate(){
is_neg = !is_neg;
if(is_zero()) is_neg = false;
return *this;
}
friend ostream& operator<<(ostream&o, Bigint_base10 const&b){
if(b.is_neg) o << '-';
o << b.data.back();
o << setfill('0');
for(auto it = next(b.data.rbegin());it != b.data.rend();++it){
o << setw(9) << *it;
}
o << setw(0) << setfill(' ');
return o;
}
friend istream& operator>>(istream&in, Bigint_base10 &b){
static string tmp;
in >> tmp;
assert_msg(in, "input should be readable as a string");
if(tmp[0] == '-'){
b.is_neg = true;
tmp = tmp.substr(1, -1);
} else {
b.is_neg = false;
}
assert_msg(all_of(tmp.begin(), tmp.end(), [](char const&c){return '0'<=c && c<='9';}), "Input should consist of digits and possibly a '-'");
assert_msg(!tmp.empty(), "Input should contain at least one digit");
b.data.resize((tmp.size()+DIGITS-1)/DIGITS);
unsigned int i, j;
for(i=tmp.size()-DIGITS, j=0;i>0;i-=DIGITS, ++j){
b.data[j] = stoll(tmp.substr(i, DIGITS));
}
b.data[j] = stoll(tmp.substr(0, i+DIGITS));
return in;
}
};
/**
* Biginteger with fixed precision
* Has 31*len bits, first bit is sign
*
* Is quite fast
*/
template<size_t len>
struct Bigint_Fixedsize{
unsigned int data[len];
static constexpr unsigned int bits = 31;
Bigint_Fixedsize(){memset(data, 0, sizeof(data));}
Bigint_Fixedsize(long long const&_a){
memset(data, 0, sizeof(data));
unsigned long long a = _a;
data[0] = a&((1u<<bits)-1);
data[1] = a>>bits;
data[1]&=~(1u<<bits);
if(a>~a){ // negative number, use complement
for(size_t i=2;i<len;++i){
data[i] = (1u<<bits)-1;
}
}
}
//__attribute__((optimize("unroll-loops")))
Bigint_Fixedsize& operator+=(Bigint_Fixedsize const&o){
unsigned int carry = 0;
for(size_t i=0;i<len;++i){
data[i]+=o.data[i] + carry;
carry = data[i]>>bits;
data[i]&=~(1u<<bits);
}
return *this;
}
//__attribute__((optimize("unroll-loops")))
Bigint_Fixedsize& operator-=(Bigint_Fixedsize const&o){
unsigned int carry = 0;
for(size_t i=0;i<len;++i){
data[i]-=o.data[i] + carry;
carry = data[i]>>bits;
data[i]&=~(1u<<bits);
}
return *this;
}
Bigint_Fixedsize operator+(Bigint_Fixedsize const&o)const{
Bigint_Fixedsize ret(*this);
ret+=o;
return ret;
}
Bigint_Fixedsize operator-(Bigint_Fixedsize const&o)const{
Bigint_Fixedsize ret(*this);
ret-=o;
return ret;
}
//__attribute__((optimize("unroll-loops")))
void multo(Bigint_Fixedsize const&o, Bigint_Fixedsize &ret)const{
static unsigned int tmp[len+1];
memset(tmp, 0, sizeof(tmp));
for(size_t i=0;i<len;++i){
unsigned long long val = 0;
for(size_t j=0;j<len-i;++j){
val+= data[i]*(unsigned long long)o.data[j]+tmp[i+j];
tmp[i+j] = val&((1u<<bits)-1);
val>>=bits;
}
}
memcpy(ret.data, tmp, sizeof(ret.data));
}
Bigint_Fixedsize& operator*=(Bigint_Fixedsize const&o){
multo(o, *this);
return *this;
}
Bigint_Fixedsize operator*(Bigint_Fixedsize const&o)const{
Bigint_Fixedsize ret;
multo(o, ret);
return ret;
}
Bigint_Fixedsize& negate(){
unsigned int carry = 0;
for(size_t i=0;i<len;++i){
data[i] = ~data[i] + !carry;
carry = (data[i]>>bits);
data[i]&=~(1u<<bits);
}
return *this;
}
Bigint_Fixedsize operator-()const{
Bigint_Fixedsize ret(*this);
ret.negate();
return ret;
}
bool operator<(Bigint_Fixedsize const&o)const{
// treat sign bit
if(data[len-1]>>(bits-1)!=o.data[len-1]>>(bits-1)){
return data[len-1]>>(bits-1);
}
for(size_t i=len-1;~i;--i){
if(data[i]!=o.data[i]) return data[i]<o.data[i];
}
return false;
}
bool operator>(Bigint_Fixedsize const&o)const{
return o<*this;
}
bool operator<=(Bigint_Fixedsize const&o)const{
return !(operator>(o));
}
bool operator>=(Bigint_Fixedsize const&o)const{
return !(operator<(o));
}
bool operator==(Bigint_Fixedsize const&o)const{
for(size_t i=0;i<len;++i){
if(data[i] !=o.data[i]) return false;
}
return true;
}
bool operator!=(Bigint_Fixedsize const&o)const{
return !operator==(o);
}
bool operator!()const{
for(size_t i=0;i<len;++i){
if(data[i]) return false;
}
return true;
}
bool is_negative()const{
return data[len-1]>>(bits-1);
}
void print_binary(ostream&o, Bigint_Fixedsize const&b){
o << "[";
for(size_t i=len;i>0;--i){
o << bitset<bits>(b.data[i-1]);
}
o << "]";
}
friend ostream& operator<<(ostream&o, Bigint_Fixedsize const&b){
if(b.is_negative()){
return o << '-' << -b << "\n";
}
Bigint_base10 ret(0);
int64_t base = 1u<<bits;
for(int i = len-1;i>=0;--i){
ret*=base;
ret+=Bigint_base10(b.data[i]);
}
o << ret;
return o;
}
explicit operator long double()const{
if(is_negative()){
return (long double)operator-();
}
long double ret = 0.0;
long double base = 1u<<bits;
for(int i = len-1;i>=0;--i){
ret = ret * base + data[i];
}
return ret;
}
/// TODO: implement for larger inputs
friend istream& operator>>(istream&i, Bigint_Fixedsize &b){
int64_t tmp;
i >> tmp;
b = Bigint_Fixedsize(tmp);
return i;
}
};
/**
* Biginteger with fixed precision
* Has 32*len bits, is signed
*
* Trying out more optimizations.
*/
template<size_t len>
struct Bigint_Fixedsize_Fast{
unsigned int data[len];
uint16_t siz;
bool sign;
static constexpr unsigned int bits = 32;
Bigint_Fixedsize_Fast(){
data[0] = 0;
siz = 1;
sign = false;
}
Bigint_Fixedsize_Fast(long long a){
sign = false;
if(a<0){
sign = true;
a=-a;
}
siz = 0;
do{
long long b = a>>bits;
data[siz] = a - (b<<bits);
a = b;
++siz;
} while(a);
}
void trim(){
while(siz>1 && !data[siz-1]) --siz;
if(siz == 1 && data[0] == 0) sign=false;
}
int comp_unsigned(Bigint_Fixedsize_Fast const&o)const{
uint16_t lim = min(siz, o.siz);
for(unsigned int i=lim;i<siz;++i){
if(data[i]){
return 1;
}
}
for(unsigned int i=lim;i<o.siz;++i){
if(o.data[i]){
return -1;
}
}
for(unsigned int i=lim-1;i+1;--i){
if(data[i]!=o.data[i]){
return data[i] < o.data[i]?-1:1;
}
}
return 0;
}
int comp(Bigint_Fixedsize_Fast const&o)const{
int sign_mul = 1-2*sign;
if(sign != o.sign){
return sign_mul;
}
return sign_mul * comp_unsigned(o);
}
bool operator<(Bigint_Fixedsize_Fast const&o)const{
return comp(o)<0;
}
bool operator>(Bigint_Fixedsize_Fast const&o)const{
return comp(o)>0;
}
bool operator<=(Bigint_Fixedsize_Fast const&o)const{
return comp(o)<=0;
}
bool operator>=(Bigint_Fixedsize_Fast const&o)const{
return comp(o)>=0;
}
bool operator==(Bigint_Fixedsize_Fast const&o)const{
return comp(o)==0;
}
bool operator!=(Bigint_Fixedsize_Fast const&o)const{
return comp(o)!=0;
}
bool operator!()const{
return operator==(ZERO);
}
Bigint_Fixedsize_Fast operator-()const{
Bigint_Fixedsize_Fast ret(*this);
if(!!ret){
ret.sign ^=1;
}
return ret;
}
Bigint_Fixedsize_Fast operator*(Bigint_Fixedsize_Fast const&o)const{
Bigint_Fixedsize_Fast ret;
ret.siz = min(siz+o.siz, (int)len);
ret.sign = (sign!=o.sign);
fill(ret.data, ret.data+ret.siz, 0);
for(unsigned int i=0;i<siz;++i){
unsigned long long carry = 0, carry_2;
for(unsigned int j=0;j<o.siz;++j){
carry+= data[i]*(unsigned long long)o.data[j] + ret.data[i+j];
carry_2 = carry >> bits;
ret.data[i+j] = carry - (carry_2<<bits);
carry = carry_2;
}
for(unsigned int j=i+o.siz;carry;++j){
carry+= ret.data[j];
carry_2 = carry >> bits;
ret.data[j] = carry - (carry_2<<bits);
carry = carry_2;
}
}
ret.trim();
return ret;
}
Bigint_Fixedsize_Fast& operator*=(Bigint_Fixedsize_Fast const&o){
*this = operator*(o);
return *this;
}
static void unsigned_add(Bigint_Fixedsize_Fast &ret, Bigint_Fixedsize_Fast const&A, Bigint_Fixedsize_Fast const&B){
const Bigint_Fixedsize_Fast *a = &A, *b = &B;
if(a->siz < b->siz) swap(a, b);
ret.sign = A.sign;
unsigned long long carry = 0, carry_2;
unsigned int j;
for(j=0;j<b->siz;++j){
carry+=(unsigned long long)a->data[j] + (unsigned long long)b->data[j];
carry_2 = carry>>bits;
ret.data[j] = carry - (carry_2<<bits);
carry = carry_2;
}
for(;j<a->siz;++j){
carry+=a->data[j];
carry_2 = carry>>bits;
ret.data[j] = carry - (carry_2<<bits);
carry = carry_2;
}
if(carry){
ret.data[j++] = carry;
}
ret.siz = j;
ret.trim();
}
static void unsigned_subtract(Bigint_Fixedsize_Fast &ret, Bigint_Fixedsize_Fast const&A, Bigint_Fixedsize_Fast const&B){
int com = A.comp_unsigned(B);
if(com == 0){
ret.sign = false;
ret.siz = 1;
ret.data[0] = 0;
return;
}
ret.sign = A.sign;
const Bigint_Fixedsize_Fast *a = &A, *b = &B;
if(com < 0){
ret.sign ^= true;
swap(a, b);
}
// deal with case then o is not trimed.
unsigned int min_siz = min(A.siz, B.siz);
unsigned long long carry = 0, carry_2;
unsigned int j;
for(j=0;j<min_siz;++j){
carry+=(unsigned long long)a->data[j] - (unsigned long long)b->data[j];
carry_2 = carry>>bits;
ret.data[j] = carry - (carry_2<<bits);
carry = -(carry_2 & 1u);
}
for(;carry;++j){
assert(j < a->siz);
carry+=a->data[j];
carry_2 = carry>>bits;
ret.data[j] = carry - (carry_2<<bits);
carry = -(carry_2 & 1u);
}
copy(a->data+j, a->data+a->siz, ret.data+j);
ret.siz = a->siz;
ret.trim();
}
static void add(Bigint_Fixedsize_Fast &ret, Bigint_Fixedsize_Fast const&A, Bigint_Fixedsize_Fast const&B){
if(A.sign == B.sign){
unsigned_add(ret, A, B);
} else {
unsigned_subtract(ret, A, B);
}
}
static void sub(Bigint_Fixedsize_Fast &ret, Bigint_Fixedsize_Fast const&A, Bigint_Fixedsize_Fast const&B){
if(A.sign != B.sign){
unsigned_add(ret, A, B);
} else {
unsigned_subtract(ret, A, B);
}
}
Bigint_Fixedsize_Fast operator+(Bigint_Fixedsize_Fast const&o)const{
Bigint_Fixedsize_Fast ret;
add(ret, *this, o);
return ret;
}
Bigint_Fixedsize_Fast& operator+=(Bigint_Fixedsize_Fast const&o){
add(*this, *this, o);
return *this;
}
Bigint_Fixedsize_Fast operator-(Bigint_Fixedsize_Fast const&o)const{
Bigint_Fixedsize_Fast ret;
sub(ret, *this, o);
return ret;
}
Bigint_Fixedsize_Fast operator-=(Bigint_Fixedsize_Fast const&o){
sub(*this, *this, o);
return *this;
}
/// TODO: more operators
void print_binary(ostream&o, Bigint_Fixedsize_Fast const&b){
o << "[";
o << sign << "/" << len << "/";
for(size_t i=siz;i>0;--i){
o << bitset<bits>(b.data[i-1]);
}
o << "]";
}
friend ostream& operator<<(ostream&o, Bigint_Fixedsize_Fast const&b){
if(b.sign){
return o << '-' << -b;
}
Bigint_base10 ret(0);
int64_t base = 1ll<<bits;
for(int i = b.siz-1;i>=0;--i){
ret*=base;
ret+=Bigint_base10(b.data[i]);
}
o << ret;
return o;
}
explicit operator long double()const{
if(sign){
return (long double)operator-();
}
long double ret = 0.0;
long double base = 1ll<<bits;
for(int i = siz-1;i>=0;--i){
ret = ret * base + data[i];
}
return ret;
}
/// TODO: implement for larger inputs
friend istream& operator>>(istream&i, Bigint_Fixedsize_Fast &b){
int64_t tmp;
i >> tmp;
b = Bigint_Fixedsize_Fast(tmp);
return i;
}
static const Bigint_Fixedsize_Fast ZERO;
};
template<size_t len>
const Bigint_Fixedsize_Fast<len> Bigint_Fixedsize_Fast<len>::ZERO(0);
#define lp_debug(x) do{}while(0)
//#define lp_debug(x) do{cerr << x; }while(0)
#define lp_debug(x) do{}while(0)
/**
* Represents an integer of the form
* <val> + <inf_part> * inf
* where inf is a symbol bigger than any integer
*/
template<typename INT>
class Barrier_Int{
private:
Barrier_Int(INT const&_val, INT const&_inf_part):val(_val), inf_part(_inf_part){}
public:
Barrier_Int():val(0), inf_part(0){}
explicit Barrier_Int(INT const&_val):val(_val), inf_part(0){}
static Barrier_Int infinity(){
return Barrier_Int(0, 1);
}
static Barrier_Int negative_infinity(){
return Barrier_Int(0, -1);
}
Barrier_Int operator-()const{
return Barrier_Int(-val, -inf_part);
}
Barrier_Int& operator+=(Barrier_Int const&o){
val+=o.val;
inf_part+=o.inf_part;
return *this;
}
Barrier_Int operator+(Barrier_Int const&o)const{
return Barrier_Int(val+o.val, inf_part+o.inf_part);
}
Barrier_Int& operator-=(Barrier_Int const&o){
val-=o.val;
inf_part-=o.inf_part;
return *this;
}
Barrier_Int operator-(Barrier_Int const&o)const{
return Barrier_Int(val-o.val, inf_part-o.inf_part);
}
Barrier_Int& operator*=(INT const&o){
val*=o;
inf_part*=o;
return *this;
}
Barrier_Int operator*(INT const&o)const{
return Barrier_Int(val*o, inf_part*o);
}
bool operator<(Barrier_Int const&o)const{
if(inf_part != o.inf_part) return inf_part < o.inf_part;
return val < o.val;
}
bool operator>(Barrier_Int const&o)const{
return o < *this;
}
bool operator>=(Barrier_Int const&o)const{
return !operator<(o);
}
bool operator<=(Barrier_Int const&o)const{
return !operator>(o);
}
bool operator==(Barrier_Int const&o)const{
return val == o.val && inf_part == o.inf_part;
}
bool operator!=(Barrier_Int const&o)const{
return val!=o.val || inf_part != o.inf_part;
}
friend ostream& operator<<(ostream&o, Barrier_Int const&b){
if(!b.inf_part){
return o << b.val;
}
o << b.inf_part << numeric_limits<double>::infinity() << "+" << b.val;
return o;
}
explicit operator long double()const{
if(inf_part != INT(0)){
return inf_part<INT(0) ? -numeric_limits<long double>::infinity() : numeric_limits<long double>::infinity();
}
return (long double)val;
}
public:
INT val;
INT inf_part;
};
/**
* Randomized LP in expected
* O(d! 4^d n)
* Does exact calculations.
* Does not need a barrier bound for dealing with unbounded parts
*/
template<typename FLOAT>
class Lp_Seidel_Barierless{
private:
// orthogonal projection of 'vec' into 'plane'
vector<FLOAT> proj_down(vector<FLOAT> const&vec, vector<FLOAT> const&plane, size_t j){
assert(vec.size() <= plane.size() && plane.size()<=vec.size()+1);
assert(j+1 < plane.size());
assert(!!plane[j]);
vector<FLOAT> ret (vec.size()-1);
//FLOAT tmp;
if(plane[j] < FLOAT(0)){
for(size_t i=0;i+1<vec.size();++i){
ret[i] = vec[j] * plane[i+(i>=j)] - vec[i+(i>=j)]* plane[j];
}
} else {
for(size_t i=0;i+1<vec.size();++i){
ret[i] = vec[i+(i>=j)]*plane[j] - vec[j]*plane[i+(i>=j)];
}
}
return ret;
}
// orthogonal projection of 'vec' out of 'plane'
vector<Barrier_Int<FLOAT> > proj_up(vector<Barrier_Int<FLOAT> > const&vec, vector<FLOAT> const&plane, size_t j){
assert(vec.size()+1 == plane.size());
assert(j+1 < plane.size());
assert(!!plane[j]);
vector<Barrier_Int<FLOAT> > ret(vec.size()+1);
copy(vec.begin(), vec.begin()+j, ret.begin());
copy(vec.begin()+j, vec.end(), ret.begin()+j+1);
for(size_t i=0;i<vec.size();++i){
ret[j]+=vec[i]*plane[i+(i>=j)];
}
FLOAT denom = plane[j];
if(denom < FLOAT(0)){
denom = -denom;
}
for(size_t i=0;i<vec.size();++i){
ret[i+(i>=j)]*=denom;
}
if(plane[j] >= FLOAT(0)){
ret[j] = -ret[j];
}
return ret;
}
Barrier_Int<FLOAT> planescal(vector<Barrier_Int<FLOAT> > const&x, vector<FLOAT> const&a){
assert(x.size() == a.size());
Barrier_Int<FLOAT> ret(0);
for(size_t i=0;i<x.size();++i){
ret+=x[i]*a[i];
}
return ret;
}
// solve lp recursively
vector<Barrier_Int<FLOAT>> solve(vector<vector<FLOAT> > const &A, vector<FLOAT> const&c, int d){
int n=A.size();
if(d==1){ // base case: single dimension
vector<Barrier_Int<FLOAT> > ret(2);
if(c[0] != FLOAT(0)){
ret[0] = (c[0]<FLOAT(0) ? Barrier_Int<FLOAT>::negative_infinity() : Barrier_Int<FLOAT>::infinity());
}
ret[1].val = FLOAT(1ull);
for(int i=0;i<n;++i){
if(ret[0]*A[i][0]+ret[1]*A[i].back()>Barrier_Int<FLOAT>(0)){
if(!A[i][0]){
lp_debug("infeasible single\n");
return vector<Barrier_Int<FLOAT>>();
}
ret[0] = Barrier_Int<FLOAT>(-A[i].back());
ret[1] = Barrier_Int<FLOAT>(A[i][0]);
if(ret[1] < Barrier_Int<FLOAT>(0)){
ret[1] = -ret[1];
ret[0] = -ret[0];
}
lp_debug(" -> " << i << " " << ret[0] << " " << ret[1] << "\n");
}
}
for(int i=0;i<n;++i){
if(ret[0]*A[i][0]+ret[1]*A[i].back()>Barrier_Int<FLOAT>(0)){
lp_debug("infeasible\n");
return vector<Barrier_Int<FLOAT>>();
}
}
return ret;
}
// initial solution
vector<Barrier_Int<FLOAT>> x(d+1);
for(int i=0;i<d;++i){
if(c[i] != FLOAT(0)){
x[i] = (c[i]<FLOAT(0) ? Barrier_Int<FLOAT>::negative_infinity() : Barrier_Int<FLOAT>::infinity());
}
}
x.back() = Barrier_Int<FLOAT>(1);
for(size_t i=0;i<A.size();++i){
if(planescal(x, A[i])>Barrier_Int<FLOAT>(0)){
int k = 0;
while(k<d && !A[i][k]) ++k;
// recurse
if(k==d) {lp_debug("what?\n"); return vector<Barrier_Int<FLOAT>>();} // degenerate failing plane??????
vector<vector<FLOAT> > A2(i);
for(size_t j=0;j<A2.size();++j){
A2[j] = proj_down(A[j], A[i], k);
}
shuffle(A2.begin(), A2.end(), Rng::get_engine());
lp_debug(string(2*d, ' ') << i << "\n");
vector<FLOAT> c2 = proj_down(c, A[i], k);
vector<Barrier_Int<FLOAT>> x2 = solve(A2, c2, d-1);
if(x2.empty()) return x2; // infeasible
x = proj_up(x2, A[i], k);
lp_debug(string(2*d, ' ') << ":");
lp_debug("";for(auto const&e:x) lp_debug(" " << e));
lp_debug("\n");
}
}
return x;
}
public:
vector<Barrier_Int<FLOAT>> solve(vector<vector<FLOAT> > const &A, vector<FLOAT> const&c){
assert(A.empty() || A[0].size() == c.size()+1);
return solve(A, c, c.size());
}
/**
* Maximize c^T x
* subject to Ax <= b
*
* Returns empty vector if infeasible
*/
vector<Barrier_Int<FLOAT>> solve(vector<vector<FLOAT> > A, vector<FLOAT> const&b, vector<FLOAT> const&c){
assert(A.size() == b.size());
for(unsigned int i=0;i<A.size();++i){
A[i].push_back(-b[i]);
}
return solve(A, c);
}
};
template<typename Big_Int, bool use_two_phase = true>
class Lp_Clarkson_Barrierless{
public:
using Solution_Int = Barrier_Int<Big_Int>;
private:
/**
* Returns a sub-multiset of size siz uniformly at random
* out of the set where i is present weight[i] times.
*
* Runs in O(|weight| + siz^2) expected time.
* Could be optimized
*/
vector<int> sample_subset(vector<int64_t> const&weight, unsigned int siz){
int64_t total_weight = accumulate(weight.begin(), weight.end(), 0ll);
vector<int64_t> samples;
while(samples.size() < siz){
int64_t new_sample = Rng::uniform<int64_t>(0, total_weight-1);
if(find(samples.begin(), samples.end(), new_sample) == samples.end()){
samples.push_back(new_sample);
}
}
sort(samples.begin(), samples.end());
vector<int> ret;
int64_t left_weight = 0;
for(unsigned int i=0, j=0;i<weight.size() && j<samples.size();){
if(samples[j] < left_weight + weight[i]){
ret.push_back(i);
++j;
} else {
left_weight+=weight[i];
++i;
}
}
return ret;
}
/// violation check
bool is_satisfied(vector<Solution_Int> const&x, vector<Big_Int> const&a){
assert(x.size() == a.size());
Solution_Int ret(0);
for(size_t i=0;i<x.size();++i){
ret+=x[i]*a[i];
}
return ret <= Solution_Int(0);
}
vector<Solution_Int> solve_two(vector<vector<Big_Int> > const&A, vector<Big_Int> const&c){
const unsigned int sample_size = c.size()*c.size()*4;
Lp_Seidel_Barierless<Big_Int> sub_lp;
// to few constrains -> use other solver
if(A.size() < sample_size){
return sub_lp.solve(A, c);
} else {
int constraints = A.size();
int variables = c.size();
vector<int64_t> weight(constraints, 1);
vector<Solution_Int> x;
vector<vector<Big_Int> > subproblem_A;
vector<char> is_violated(constraints, 0);
for(unsigned int iteration=1;;++iteration){
subproblem_A.clear();
vector<int> subspace = sample_subset(weight, sample_size);
for(int const&e:subspace){
subproblem_A.push_back(A[e]);
}
x = sub_lp.solve(subproblem_A, c);
// infeasible case
if(x.empty()){
return x;
}
int64_t total_violated = 0;
for(int i=0;i<constraints;++i){
is_violated[i] = !is_satisfied(x, A[i]);
if(is_violated[i]){
total_violated+=weight[i];
}
}
if(total_violated == 0){
cerr << "Iterations: " << iteration;
cerr << ", max weight: " << *max_element(weight.begin(), weight.end()) << "\n";
break;
}
if(total_violated*3*variables <= accumulate(weight.begin(), weight.end(), 0ll)){
for(int i=0;i<constraints;++i){
if(is_violated[i]){
weight[i]*=2;
}
}
assert_msg(accumulate(weight.begin(), weight.end(), 0ll) < (1ll<<62), "Weight overflow");
}
}
return x;
}
}
vector<Solution_Int> solve_one(vector<vector<Big_Int> > const&A, vector<Big_Int> const&c){
const unsigned int constraints = A.size(), variables = c.size();
if(constraints <= variables*variables*6){
return solve_two(A, c);
} else {
const unsigned int sqrt_constraints = sqrt(constraints);
const unsigned int sample_size = variables * sqrt(constraints);
vector<Solution_Int> x;
vector<vector<Big_Int> > subproblem_A;
vector<int> violations;
for(unsigned int iteration=1;;++iteration){
//function<vector<int>()> samp = [&, this](){return sample_subset(vector<int64_t>(constraints, 1), sample_size);};
//vector<int> subspace = Timer::execute_timed<vector<int>>(samp, "Sampling");
vector<int> subspace = sample_subset(vector<int64_t>(constraints, 1), sample_size);
for(int const&e:subspace){
subproblem_A.push_back(A[e]);
}
x = solve_two(subproblem_A, c);
// infeasible case
if(x.empty()){
return x;
}
violations.clear();
for(unsigned int i=0;i<constraints;++i){
if(!is_satisfied(x, A[i])){
violations.push_back(i);
}
}
cerr << "Violations: " << violations.size() << " / " << 2*sqrt_constraints << "\n";
if(violations.empty()){
cerr << "Iterations: " << iteration;
cerr << ", used constraints:" << subproblem_A.size() << "\n";
break;
}
subproblem_A.erase(subproblem_A.end()-sample_size, subproblem_A.end());
if(violations.size() <= 2*sqrt_constraints){
for(int const&e : violations){
subproblem_A.push_back(A[e]);
}
}
}
return x;
}
}
public:
vector<Solution_Int> solve(vector<vector<Big_Int> > const&A, vector<Big_Int> const&c){
if(use_two_phase){
return solve_one(A, c);
} else {
return solve_two(A, c);
}
}
/**
* Maximize c^T x
* Subject to Ax <= b
*
* Returns empty vector if infeasible
*/
vector<Solution_Int> solve(vector<vector<Big_Int> > A, vector<Big_Int> const&b, vector<Big_Int> const&c){
assert(A.size() == b.size());
for(unsigned int i=0;i<A.size();++i){
A[i].push_back(-b[i]);
}
return solve(A, c);
}
};
using ll=long long;
using lf=long double;
using elf=Bigint_Fixedsize_Fast<10>;
int main()
{
cin.tie(0)->sync_with_stdio(0);
// simplex with 7 dimensions, each being r, a1, a2, b1, b2, c1, c2 (1 and 2 exist due to bypassing nonnegativity constraints)
// max -r
// s.t. -r - a1*x^2 - b1*x - c1 <= -y
// -r + a1*x^2 + b1*x + c1 <= y
vector<elf>c{-1,0,0,0};
int q;cin>>q;
while(q--)
{
vector<vector<elf>>A;
vector<elf>B;
vector<elf>x;
int n;cin>>n;
while(n--)
{
ll x,y;
cin>>x>>y;
B.push_back(-y);
A.push_back({-1,-x*x,-x,-1});
B.push_back(y);
A.push_back({-1,x*x,x,1});
}
Lp_Clarkson_Barrierless<elf>solver;
auto res=solver.solve(A,B,c);
lf ans=(lf)res[0]/(lf)res[4];
cout<<setprecision(12)<<fixed<<ans*ans<<"\n";
}
}
这程序好像有点Bug,我给组数据试试?
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3728kb
input:
1 4 0 0 1 3 2 9 3 0
output:
5.062500000000
result:
ok found '5.0625000', expected '5.0625000', error '0.0000000'
Test #2:
score: 0
Accepted
time: 193ms
memory: 5312kb
input:
60 1 1000 -990 2 171 -638 949 -99 2 633 227 -257 -602 3 634 -994 633 999 -374 995 3 445 -110 586 -121 462 29 9 -995 -224 -458 -833 691 -670 456 -259 -376 55 -563 -12 834 827 -826 -220 299 744 17 997 991 997 976 997 988 998 -986 999 -982 999 -980 999 -996 998 -988 998 -991 997 987 1000 996 999 -1000 ...
output:
0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 543160.125996398143 121.000000000000 0.832006181212 412780.607179428399 12.250000000000 15750.250000000000 118751.380086098421 880245.505473519532 1.000000000000 15.363373360329 854986.713164986710 20.250000000000 24567.66738...
result:
ok 60 numbers
Test #3:
score: 0
Accepted
time: 5ms
memory: 3796kb
input:
1000 1 -585478 527569 1 152984 679945 1 -174472 172630 1 235983 471538 1 -250372 650998 1 521028 -109032 1 121457 989514 1 916700 -223410 1 25908 939341 1 999032 369442 1 249207 -874185 1 -921949 719467 1 -692065 -756006 1 580461 644861 1 -382986 975568 1 644060 -113069 1 -588888 717169 1 2947 -3929...
output:
0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 ...
result:
ok 1000 numbers
Test #4:
score: 0
Accepted
time: 9ms
memory: 3692kb
input:
1000 2 578578 -462573 -614596 -50411 2 568651 926188 -15389 -281674 2 -56242 -213116 215036 310015 2 -568452 -743741 -314862 -573269 2 -428037 -926383 -172945 -31965 2 -58020 145819 -69585 116311 2 -629887 -794837 704590 -761914 2 243217 -433618 98814 -457689 2 147490 681479 665176 -119632 2 -851707...
output:
0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 ...
result:
ok 1000 numbers
Test #5:
score: 0
Accepted
time: 14ms
memory: 3660kb
input:
1000 3 -734917 -489090 419510 102330 712427 633246 3 36286 -456156 747264 -743132 260371 -674274 3 429263 14588 352092 -105774 547767 232534 3 -913665 328259 240305 -680653 -295994 -678964 3 597443 -368402 -231672 43641 -590555 396735 3 -603016 904082 -607928 649743 464117 526551 3 350193 -351624 33...
output:
0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 ...
result:
ok 1000 numbers
Test #6:
score: 0
Accepted
time: 37ms
memory: 3740kb
input:
1000 4 -48411 -514672 165369 -349660 -281244 -842990 50473 -422110 4 -487482 -318709 861670 -709796 -491931 -335068 -523699 -455262 4 -817575 -338873 869501 905839 -717462 -668516 841972 769497 4 530706 615905 128991 -871809 82920 -948448 -317630 -725769 4 144451 772470 -923425 791489 513030 193835 ...
output:
0.001635252927 0.441888893679 0.095087558884 3655702.651955105179 769858.665807108583 876.964418129029 2.383378035147 0.003314331357 0.046074289956 0.414087095747 31534.752837082105 0.011533310762 1322109.793439251046 2475705.141855127643 5494047.076382468022 0.604758111540 36615.982224410417 15433....
result:
ok 1000 numbers
Test #7:
score: 0
Accepted
time: 58ms
memory: 3668kb
input:
1000 5 -425128 981633 -381689 946206 957441 996145 84010 712860 -8814 738024 5 235841 662950 864929 -477349 823444 -108225 714735 661226 300163 983888 5 -972539 106077 -856485 556296 -951397 193386 -207377 778279 -862794 555900 5 -877483 818676 537271 -193411 341352 408858 167065 819835 451709 87895...
output:
162.217423560921 24899.703037345875 111166879.556401949863 440.668043947199 45502620.026469050281 0.908165720214 48119370.938288595611 1331743.107360073524 1145.041044423147 11911.409089635788 898995.931063926371 0.281486398633 7.835265455787 0.770599173806 1167.305707531013 40318098119.960337288678...
result:
ok 1000 numbers
Test #8:
score: 0
Accepted
time: 185ms
memory: 3948kb
input:
1000 10 860001 272235 -30508 220967 711207 504388 77794 647164 303746 959200 592742 534104 57277 254211 266565 968002 919148 568676 991753 -20796 10 95213 204518 35283 198770 69842 203724 -316246 248661 -319918 245804 -923990 767251 -689125 503455 175418 229272 90053 206083 -815528 637145 10 -808164...
output:
52855287328.797471813858 4736213.545027937558 325.276604038309 11692527.619325693794 61306.467095067794 24947264304.330530360341 492734951022.492099940777 0.965345707591 1913.495504072973 385.474663045163 6.448445177198 42078421804.716278254986 5867468.015624116890 0.606672064838 24254772.5148242599...
result:
ok 1000 numbers
Test #9:
score: 0
Accepted
time: 2ms
memory: 3724kb
input:
1 4 -1000000 -1000000 -999999 1000000 999999 1000000 1000000 -1000000
output:
0.000000000000
result:
ok found '0.0000000', expected '0.0000000', error '-0.0000000'
Test #10:
score: 0
Accepted
time: 1ms
memory: 3788kb
input:
1 4 -1000000 -1000000 -999999 1000000 -999998 1000000 -999997 -100000
output:
12656249999.999999998137
result:
ok found '12656250000.0000000', expected '12656250000.0000000', error '0.0000000'
Test #11:
score: 0
Accepted
time: 2ms
memory: 3820kb
input:
1 4 -1000000 -1000000 -999999 1000000 -999998 1000000 -999997 -1000000
output:
0.000000000000
result:
ok found '0.0000000', expected '0.0000000', error '-0.0000000'
Test #12:
score: 0
Accepted
time: 0ms
memory: 3860kb
input:
1 4 -1000000 -300000 -999999 300000 -999998 300000 -999997 -300000
output:
0.000000000000
result:
ok found '0.0000000', expected '0.0000000', error '-0.0000000'
Test #13:
score: 0
Accepted
time: 2ms
memory: 3784kb
input:
1 4 -1000000 -999999 -999999 999998 -999998 999996 -999997 -999999
output:
0.562500000000
result:
ok found '0.5625000', expected '0.5625000', error '0.0000000'
Test #14:
score: 0
Accepted
time: 2ms
memory: 3752kb
input:
8 4 -1000000 -1000000 -999999 1000000 999999 999977 1000000 -1000000 4 -1000000 -1000000 -999999 1000000 999999 999770 1000000 -1000000 4 -1000000 -1000000 -999999 1000000 999999 997770 1000000 -1000000 4 -1000000 -1000000 -999999 1000000 999999 977770 1000000 -1000000 4 -1000000 -1000000 -999999 10...
output:
33.062533062525 3306.253306252480 310806.560806483105 30885837.135829414370 62499875000.000000026077 561097185.448957108485 0.563062922156 2770157895.491001281422
result:
ok 8 numbers
Test #15:
score: 0
Accepted
time: 24ms
memory: 3720kb
input:
50 20 -78760 901241 -290160 346799 -100100 886312 -400033 -7842 -128289 858428 -443380 -236792 -204313 613533 870820 96059 812309 226162 -35539 980448 797663 345545 -445875 -256648 -460410 -299719 627726 793426 832862 169452 656272 795052 -339551 196857 -34433 992148 -388395 11457 -255059 482328 20 ...
output:
1995515551.235050740419 81676587.162761471642 15097.239959080308 23.395512429438 579359934.002431530855 3853.663650178120 50.381382962813 2611489.365440987983 131464690.062370108928 2137.820036269479 284.143965129583 564775635.752647274523 39822891364.848458699882 909.273877028092 16588.063569248844...
result:
ok 50 numbers
Test #16:
score: 0
Accepted
time: 2876ms
memory: 4428kb
input:
500 300 -574218 -271807 -443150 -83950 15479 867073 -467689 -121944 -318587 129168 -24306 766466 -968754 -612160 -814705 -519500 -60831 677156 -195474 372912 -44244 717366 -134450 505915 -523893 -204101 -179966 405956 -732527 -448979 -886997 -569400 -190507 383431 -538163 -223837 -885831 -568677 -60...
output:
223.573986308187 11176.342872447977 1192.744752752307 453187006.523357130412 554031869.361881787132 9.206159011827 126.713163644150 2.791225143125 7790357819.290426067542 13298746917.732571498491 138873066385.756835281849 4982989809.283447164577 67327474.877917289603 4313.350012823093 2045627.963990...
result:
ok 500 numbers
Test #17:
score: 0
Accepted
time: 483ms
memory: 138828kb
input:
2 100000 856014 -110712 -748941 799207 -390374 -391739 448342 -991095 -64136 -981770 583018 -785726 -94728 -935377 768587 -365471 -102072 -963217 -547043 88834 -57865 -990529 -569447 175470 -331771 -501999 -123570 -924764 -86739 -946110 -481573 -114452 -143293 -909698 -188793 -835029 -368557 -415082...
output:
1147482388.192809438100 27.055180794732
result:
ok 2 numbers
Test #18:
score: 0
Accepted
time: 1876ms
memory: 3888kb
input:
1000 100 -119975 -664365 949391 58457 740004 -370401 540289 -639167 -788110 721100 416862 -768862 -510399 -3617 -438471 -204422 -820344 865532 -788887 755411 601194 -601478 -489457 -66989 -702681 494011 581714 -590937 621839 -564798 -596490 195550 390610 -797275 -511753 -13584 -295498 -456173 260700...
output:
601442791.649372832850 24.854725015605 12179361657.976363155991 3766193.376661313255 162530385978.939829275012 12661609.461962327058 4212.845367022982 47746959069.049593526870 38556717282.975946828723 34153564.440029987240 109150.232109145542 20645.945118390166 1045764154.094279524696 4163.031420954...
result:
ok 1000 numbers
Test #19:
score: 0
Accepted
time: 4152ms
memory: 4152kb
input:
1000 200 789124 -486241 -585609 207780 -420071 646265 -719341 -271629 798017 -517521 -358192 786061 882118 -897750 -572109 237809 584895 259362 -626674 62322 -504210 442329 -343020 802463 477414 549189 709507 -158428 802832 -539018 -273113 927143 639188 90473 -780485 -522065 330923 858488 719753 -19...
output:
91156684.238086921709 3501.157259590953 3851361410.710967715830 2454734.159761274972 5.035905023544 82.768320704366 284923642635.163662046194 380786260.886463643837 17.167559108997 5682477627.397740963846 4.455315979065 1265.284103345971 68.279475933634 1036.497538194536 2393.819117880462 791577964....
result:
ok 1000 numbers
Test #20:
score: 0
Accepted
time: 3727ms
memory: 4292kb
input:
666 300 733074 -538691 -186759 708121 19954 783003 144458 730949 204506 673961 553123 25690 226219 653422 624395 -178962 414482 359209 438237 305003 -273026 615231 -614391 -107992 -400931 412346 -483918 233375 -285489 597497 582783 -58643 -327538 537216 514448 125717 347458 484719 806041 -811603 783...
output:
14218890.034433960013 1560980.928444947095 135793682616.934556789696 597586.355954869641 2293035.645490295183 29924753323.643191620708 102.669386386863 2001978.225152625335 32.629073726008 3.322092988990 12200829391.231673671864 204120702.974940405882 59027030680.153708700091 6296990.545126972561 32...
result:
ok 666 numbers
Test #21:
score: 0
Accepted
time: 3481ms
memory: 4352kb
input:
500 400 -357828 -511505 811629 806298 595389 228873 228176 -405417 -718847 -22231 43107 -557461 478070 -20663 375542 -203854 468039 -41469 224127 -408358 87768 -530964 -370957 -500036 518859 60735 -647687 -152816 762116 659689 -140768 -600992 -314127 -540262 691144 464427 -822638 195188 640167 33654...
output:
2164267.283137999378 60833.544911473781 30687521.121466788652 409369199255.895405799150 156645670.157307220958 1133.028808246869 1180.614519619067 9652051207.435424485244 1404312.117983130425 116471.295269831420 19045036850.028315760195 47077498545.714740589261 136739.889082685168 132245.86845501955...
result:
ok 500 numbers
Test #22:
score: 0
Accepted
time: 3084ms
memory: 4540kb
input:
400 500 -500380 -894037 849708 881783 -558459 209296 851475 918558 -514750 -630889 829936 476110 -549945 42354 787624 -354093 814192 160977 -502873 -848842 772553 -637093 832402 525820 777452 -545681 -516265 -602612 813882 154790 822592 328889 818427 245057 846509 816020 798227 -150855 -540278 -1459...
output:
336358.682842416889 739007712.313469593588 8062740.943840485167 46895.725806574437 6280.637151560179 18764.817711915761 4518783186.362140861340 163.266277089865 444006974975.418383538723 43.545280607724 8.723681980637 3172.478944781044 1539479650.007746148389 143.955332874099 2.626373141941 11143941...
result:
ok 400 numbers
Test #23:
score: 0
Accepted
time: 2834ms
memory: 4816kb
input:
333 600 397147 736863 710330 449692 713165 445736 742693 406407 -80845 715759 -131224 681331 256197 788247 4673 760369 -636028 -4806 600988 576750 -287208 535378 644821 529254 699244 463843 -791164 -339893 804029 317447 -256744 568277 894333 169764 991373 -10561 701153 461309 -500555 240181 -655423 ...
output:
51526.628582581562 5144056.831773761380 1108984120.796890642960 536.957274890133 2.181490610248 2855000.521424936621 7.895070916774 26330215618.176730643958 70553.222649386660 4296.461204550854 158697.164637318537 27333878.097813651633 347065432.787239318830 11.780691242172 32965.376255889887 109260...
result:
ok 333 numbers
Test #24:
score: 0
Accepted
time: 2593ms
memory: 4816kb
input:
285 700 950915 -131859 287194 -348466 732575 15902 252777 -413880 216880 -487731 981137 -169278 536902 -34166 642935 14401 833007 -25394 549734 -25558 747152 12749 470592 -90277 905736 -83662 693698 19630 838447 -28990 954527 -136018 230712 -458599 739346 14424 369980 -213227 237154 -445291 106468 -...
output:
7872.481725145289 137.323613832406 7.321763401845 108838738.727765142285 143181888199.528975963593 180745.030983438276 3757486297.451869042125 49308496.072532682290 3.421210123941 3719.395042904195 5468199288.922670814674 36176108156.892100151628 167194.534382224159 4519810.729870232294 5.9426154848...
result:
ok 285 numbers
Test #25:
score: 0
Accepted
time: 2431ms
memory: 5068kb
input:
250 800 215344 949751 609032 593146 -105838 241410 -305554 -651790 -63750 385360 190202 926700 977848 -964837 372668 969088 723821 235110 -183595 -65083 2137 579745 874313 -407943 -274645 -490837 -352061 -909644 -108768 230807 118691 831006 7827 594698 -353540 -918151 479010 860107 528736 775396 137...
output:
1220.641278658595 3841279.090076846672 12.579284521272 575705766647.107006192207 1558427.697873099713 103457223182.733334295452 3.124442148396 4899838959.074188693427 787527992820.601503252983 398.600383507315 102710.607904608136 213705230964.380473181605 101864.459371873382 7589694361.195575245190 ...
result:
ok 250 numbers
Test #26:
score: 0
Accepted
time: 2211ms
memory: 5100kb
input:
222 900 159295 -261280 -490655 -364459 -564376 -402728 -604271 -425659 -11582 -247668 558244 -406118 307888 -296721 818686 -586122 623984 -445193 -316296 -295538 -829005 -584571 -271531 -282717 885932 -643583 -20565 -247759 944306 -697087 198978 -268580 189596 -266716 564738 -409799 652943 -463779 -...
output:
191.797796221606 888649.482900829887 2548.312980468019 237569579369.701734945178 24.760431996642 1529.443612273955 2001480394.485307409428 7281629.924218421376 50766.110966427898 168430563771.424650713801 806829.977464678186 1571.277728324362 6.718946983938 1568004021.378870078246 595.639091674366 5...
result:
ok 222 numbers
Test #27:
score: 0
Accepted
time: 2213ms
memory: 5268kb
input:
200 1000 921973 -681192 106799 -803185 -788145 993628 -416714 -4302 967514 -643801 151959 -857032 914844 -693738 440285 -958716 76084 -767643 -234739 -342853 -783938 978294 88850 -779199 994748 -589724 547596 -955741 827485 -776166 -509420 218589 -103043 -577817 -480852 137104 -207939 -394029 636786...
output:
451896268.535869163985 7.049967204322 5671529.651457276663 664528040183.412058472633 85.120650936934 7648180137.926402494777 1992099913.640064448235 44806.031678430998 1741949577.062794155907 3.191682230697 59567996.320442014967 831472726.286510259262 5.061339593504 53358834.160847968291 39478.58235...
result:
ok 200 numbers
Test #28:
score: 0
Accepted
time: 743ms
memory: 17848kb
input:
20 10000 367451 -409708 455070 -596428 -849725 742244 471078 -632029 165323 -32253 -955469 715329 -923101 725677 481472 -655412 605011 -948267 -407637 634856 147682 -2823 212276 -113335 54592 143212 -915359 727879 -706038 746189 185824 -67108 -390828 623713 445008 -574302 488755 -671854 209758 -1088...
output:
4742.417475735073 5708564220.375649565831 173867306652.438182353973 262985.123262478953 430508202.913528355130 84862534.918685415912 880.520404815416 45696595.620074804199 315.429554562562 305020763584.989866077900 857.447656878375 138426330564.141373887658 7316.911907954080 81.128207016024 1490448....
result:
ok 20 numbers
Test #29:
score: 0
Accepted
time: 517ms
memory: 138980kb
input:
2 100000 456841 473364 686221 501790 971762 617932 -460757 766289 699 504584 432758 447040 374796 454319 572086 478648 -193285 584233 491439 463152 -248925 592962 990805 603449 271131 432749 632227 506041 663581 521394 835276 572284 -686905 908087 878120 545025 9952 525303 -230097 589015 520429 4563...
output:
1144656406.727522720466 2762.706007564701
result:
ok 2 numbers
Test #30:
score: 0
Accepted
time: 2135ms
memory: 5244kb
input:
200 1000 355997 447007 -647551 160906 135262 493431 -191209 471687 -123387 482560 -947728 -194956 456306 412695 -288271 408556 -590730 228483 29143 515969 136898 495379 -437761 347020 -414146 347047 665752 276974 -654078 154335 -196238 463226 531736 340356 811033 150173 -508933 298732 -699464 117175...
output:
453791424.356235164247 4.500433230072 349576359429.348954081535 56072644255.023855153471 472464940.015023869200 28.545541639951 3126.607867955876 16689736.815819174753 48476275650.255458265543 28360079.480654001116 13621103754.056490426883 260995817.089357731078 230480.342000040153 17.985433268241 3...
result:
ok 200 numbers
Test #31:
score: 0
Accepted
time: 762ms
memory: 18104kb
input:
20 10000 -198525 -699168 735571 -956068 73682 -861911 668211 -965932 -925579 89819 -26783 -810274 -318416 -604594 -969046 153288 849510 -929129 -531191 -402219 900779 -912916 -569364 -361171 -388794 -542459 -274404 -640970 946191 -896402 -666538 -250493 762366 -950829 163122 -899613 -418908 -514429 ...
output:
4765.842891200234 75778.430535410797 31472925652.556074801832 5541071814.074864081107 12531584794.790700065903 5.034535505574 79583249.174155306668 263.579186043843 2111504.014578640989 9220669.670962820303 8882473448.214604915120 58104345751.648452587426 51959698296.369479972869 600452154.719005782...
result:
ok 20 numbers
Test #32:
score: 0
Accepted
time: 493ms
memory: 139016kb
input:
2 100000 856014 -110712 -748941 799207 -390374 -391739 448342 -991095 -64136 -981770 583018 -785726 -94728 -935377 768587 -365471 -102072 -963217 -547043 88834 -57865 -990529 -569447 175470 -331771 -501999 -123570 -924764 -86739 -946110 -481573 -114452 -143293 -909698 -188793 -835029 -368557 -415082...
output:
1147482388.192809438333 27.055180794732
result:
ok 2 numbers
Test #33:
score: 0
Accepted
time: 2102ms
memory: 5224kb
input:
200 1000 598099 -707590 -941332 986389 5924 437220 50660 372206 -2232 484704 714086 -980976 -43837 532989 508536 -466519 -628392 976403 172620 189199 607743 -717828 -246520 756652 526210 -527203 710937 -988627 -154755 656534 -583701 998460 -176700 691814 -631576 986748 364647 -162636 -294261 797353 ...
output:
453829535.323916810506 692823.500401524856 64.576378337736 2231952899.812306894921 63034407.125354204494 3647385879.133476848016 6.224857976447 186588789039.748957246542 110362170.282925654683 159530.720715592597 126663613121.627349533141 22305462784.727619927377 28902219.008666092021 31.28368554630...
result:
ok 200 numbers
Test #34:
score: 0
Accepted
time: 736ms
memory: 18040kb
input:
20 10000 -18780 765100 -16479 784796 -91618 222362 -321261 -464328 -98405 179720 -118075 63905 -292267 -463429 -476200 -48911 -9084 849233 -245457 -409691 -584219 659685 -60673 433871 -309507 -467014 -340866 -450884 -284189 -458835 -110342 108100 -361323 -424772 -224549 -364719 -151040 -104483 -1817...
output:
4763.882562168930 639149.966133973492 242.823108800562 59436543748.124668199569 4270273352.016200689832 67629.093009163743 11.852466529697 55864092542.095333885401 640493117912.878875315189 20.454042335522 126703.779311187953 119.554038570377 268005677896.111941918731 153461770.869664694517 6.748023...
result:
ok 20 numbers
Test #35:
score: 0
Accepted
time: 517ms
memory: 139020kb
input:
2 100000 667236 867053 647992 281838 609793 -886361 669939 974744 632726 -227234 -932814 -95833 656494 508904 -931761 -101283 -920106 -475126 615659 -694328 -915575 -573803 -946181 317231 -929371 -157155 -929775 -165768 -942491 232024 -949438 402454 -957596 690336 -956627 664321 661259 652248 -91611...
output:
1150380510.861905797035 1299086484.227609499590
result:
ok 2 numbers
Test #36:
score: 0
Accepted
time: 5ms
memory: 3852kb
input:
1000 1 245453 -824575 1 -197246 459584 1 -77058 815906 1 955295 986048 1 -585478 -968190 1 841394 57242 1 31072 99690 1 -78510 -741530 1 -154867 214579 1 -457213 -295148 1 43615 356233 1 -726485 152984 1 617038 252507 1 -109879 -116490 1 784366 340245 1 -174472 452792 1 -320241 156688 1 310604 55116...
output:
0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 ...
result:
ok 1000 numbers
Test #37:
score: 0
Accepted
time: 9ms
memory: 3920kb
input:
1000 2 837672 609450 787258 -294767 2 -693446 -190985 578578 -816820 2 -614596 -59091 294336 20778 2 304609 676004 920176 -533309 2 664878 -452235 64349 568651 2 -563942 -237278 -848305 -535691 2 -80676 -348564 -709683 589367 2 -247490 201794 536850 492292 2 495278 -704083 -112641 430391 2 367097 -4...
output:
0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 ...
result:
ok 1000 numbers
Test #38:
score: 0
Accepted
time: 24ms
memory: 3800kb
input:
1000 3 -570109 -991378 708540 -14266 690167 732422 3 -734917 -591316 419510 850008 712427 -44056 3 480071 217466 16935 709765 449771 -84197 3 585910 467300 856872 36286 -872052 747264 3 -750019 -921263 592440 260371 720656 -34731 3 283023 433718 -660833 -628076 429263 407689 3 352092 -408368 547767 ...
output:
0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 ...
result:
ok 1000 numbers
Test #39:
score: 0
Accepted
time: 37ms
memory: 3880kb
input:
1000 4 120184 -522502 -335327 196533 73779 690679 -48411 -394182 4 -644460 -240894 165369 -80520 -281244 891853 50473 -18791 4 206293 283841 -892530 394320 -715834 407924 69350 30219 4 552269 -487482 957785 966227 723653 861670 994344 -491931 4 84983 -523699 34389 -678235 337086 -436448 544394 36516...
output:
327393699392.262514770031 37531261813.457367349416 8874485904.073146512732 212493502985.621785402298 7250999080.494085154496 20488573849.820733793080 23311394774.245149722323 99807117862.582002773881 23062617866.281058242545 38678994544.534397482872 446620731881.388649135828 103647334209.30294184386...
result:
ok 1000 numbers
Test #40:
score: 0
Accepted
time: 60ms
memory: 3804kb
input:
1000 5 712404 -123329 551103 -557818 -444534 677308 -425128 -168678 -645206 668205 5 -381689 -145355 957441 433315 84010 -845421 -8814 -382972 -370969 -741883 5 704980 -185588 -52471 -686827 819704 -25330 357980 637232 -308202 625145 5 670814 -452431 -36276 -447692 -388856 235841 -614697 598694 5410...
output:
152585381702.982625365257 85161480852.081577807665 364999857514.543225586414 38193794255.494196884334 442592874023.303459405899 674011877106.688046634197 248849198288.496592283249 41402592568.788037940860 143358726694.900196805596 160126916159.742442667484 91101172575.847138687968 58568477040.623402...
result:
ok 1000 numbers
Test #41:
score: 0
Accepted
time: 181ms
memory: 3796kb
input:
1000 10 719749 300237 450883 20532 -678730 -219264 464946 -623294 860001 669923 -740634 695666 -30508 -154290 711207 870176 77794 -897832 -501417 -86445 10 303746 -867968 592742 337531 57277 435153 266565 -71540 -353681 -318147 -306074 74757 -294888 950911 -629552 797293 919148 -373377 -979009 83731...
output:
210103325229.469515249133 444176313518.757452368736 506247807424.806523591280 354780679482.129253894091 539970632520.138857692480 249634350280.576563730836 571102826159.883505582809 94682708939.258051142097 394956981248.954879432917 548759596132.504173189402 425305158733.739939302206 399083667196.24...
result:
ok 1000 numbers
Test #42:
score: 0
Accepted
time: 1882ms
memory: 4012kb
input:
1000 100 503940 892207 -360030 127313 847901 620477 -119975 485357 949391 -85679 740004 570364 540289 -514498 -788110 -550152 416862 -170936 -510399 -85009 -438471 147817 -820344 -419709 -788887 268568 601194 -463858 -489457 -271701 -702681 -677706 581714 -98124 621839 -87515 -596490 -406601 390610 ...
output:
832396317046.940266132355 908077635051.904096305370 936028198571.490002751350 949110704399.380980134010 937906309420.686580240726 952314657587.175270378590 878145042402.426486730576 936442232024.378109037876 949072984456.833535313606 960108790191.961933970451 869632201029.259592294693 841869778848.4...
result:
ok 1000 numbers
Test #43:
score: 0
Accepted
time: 813ms
memory: 17984kb
input:
20 10000 -70357 850317 169057 860123 -76514 365758 367451 -811104 455070 -974302 -849725 -438852 471078 444337 165323 383392 -955469 -385190 -923101 -943035 822734 820483 481472 -196437 605011 422553 -407637 417395 147682 623919 212276 -652188 54592 34985 -915359 -741686 -706038 559876 756062 94848 ...
output:
998335142645.599759876728 999524805668.711556315422 999251785658.747282087803 999071955797.265794873238 999838447779.569842576981 999794592809.830387771130 999777663877.084612369537 999731012368.885459661484 999091893506.746640443802 999806895467.795173645020 999580030136.796259999275 998973163482.8...
result:
ok 20 numbers
Test #44:
score: 0
Accepted
time: 544ms
memory: 138812kb
input:
2 100000 -881270 -944828 758910 763086 -633064 439558 456841 433295 -931368 900398 686221 166089 971762 -975992 -460757 -889713 699 -285680 432758 -962102 374796 91613 572086 -391394 -193285 30235 491439 -472937 -248925 -128543 990805 298778 271131 86955 632227 161868 663581 -201111 835276 543619 -6...
output:
999917382510.243347406387 999942779320.982900202274
result:
ok 2 numbers
Test #45:
score: 0
Accepted
time: 708ms
memory: 17920kb
input:
20 10000 -425094 847211 -767600 257206 963661 16874 -198525 302520 735571 -382082 73682 -517571 668211 -172051 -925579 35046 -26783 -385936 -318416 509908 -969046 59168 849510 -162900 -531191 -757703 900779 -95896 -569364 16362 -388794 289214 -274404 -634358 946191 -404712 -666538 562872 762366 -158...
output:
999147486723.547218501568 999757756670.616625368595 998942975304.725870251656 999598229269.243472814560 998849702270.904767334461 999569489549.844198167324 999823989390.783880233765 998831139698.458937764168 999198313197.701947569847 999131611645.472440898418 999724637946.988050043583 998373816184.1...
result:
ok 20 numbers
Test #46:
score: 0
Accepted
time: 508ms
memory: 138936kb
input:
2 100000 -172784 17214 787403 -903054 -558038 90674 856014 -453082 -748941 -507384 -390374 87370 134043 407622 448342 761942 -64136 650351 -25780 490841 583018 365150 -94728 -357856 768587 849980 -102072 48624 -965970 -736101 -547043 -759821 -57865 452464 -569447 527213 -331771 -267817 -123570 22008...
output:
999950865683.761961698532 999918261435.796669244766
result:
ok 2 numbers
Test #47:
score: 0
Accepted
time: 786ms
memory: 18012kb
input:
20 10000 255021 844104 226042 591067 101909 731214 200648 -555486 -18780 210137 -933209 438563 893715 246413 -16479 -341671 -91618 -415054 257898 -37150 -760824 -702148 182696 905489 332607 62042 -727584 425665 -321261 472027 73358 -769385 431453 667930 709666 -39367 338111 496166 -98405 552342 4234...
output:
999570511629.667107462883 998784608815.355494260788 999198703255.415539503098 998727089694.075796425343 999060441264.592671751976 999711967923.664443790913 999867916998.090777575970 998877073732.436483561993 999220250945.044896245003 999379384042.417220532894 999552918049.998315215111 999306433365.4...
result:
ok 20 numbers
Test #48:
score: 0
Accepted
time: 535ms
memory: 139224kb
input:
2 100000 507332 979256 -247328 494029 580211 706940 -675111 -345939 -468440 154539 602736 -956497 359547 826086 294218 385225 -100600 649605 -484319 908932 889314 540612 273310 -324319 667236 634873 171492 -464667 316985 -280435 851887 181581 647992 719899 257252 -72591 -292271 671957 -984341 931410...
output:
999886167158.542926251888 999942316699.079430818558
result:
ok 2 numbers