QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#110518#6542. Optimal Quadratic Functionhjroh0315AC ✓4152ms139224kbC++2033.1kb2023-06-02 18:15:022023-06-02 18:16:08

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-06-02 18:16:08]
  • 评测
  • 测评结果:AC
  • 用时:4152ms
  • 内存:139224kb
  • [2023-06-02 18:15:02]
  • 提交

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,我给组数据试试?

詳細信息

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