QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#298905#7906. Almost Convexucup-team045#AC ✓79ms4180kbC++2016.1kb2024-01-06 15:46:252024-01-06 15:46:26

Judging History

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

  • [2024-01-06 15:46:26]
  • 评测
  • 测评结果:AC
  • 用时:79ms
  • 内存:4180kb
  • [2024-01-06 15:46:25]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
using LL = long long;
using point_t = long long; //全局数据类型,可修改为 long long 等

const point_t eps = 1e-8;
const long double PI = acosl(-1);
//const long double PI = numbers::pi_v<long double>;

// 点与向量
template <typename T>
struct point{
    T x, y;

    bool operator==(const point &a) const { return (abs(x - a.x) <= eps && abs(y - a.y) <= eps); }
    bool operator<(const point &a) const{
        if (abs(x - a.x) <= eps)
            return y < a.y - eps;
        return x < a.x - eps;
    }
    bool operator>(const point &a) const { return !(*this < a || *this == a); }
    point operator+(const point &a) const { return {x + a.x, y + a.y}; }
    point operator-(const point &a) const { return {x - a.x, y - a.y}; }
    point operator-() const { return {-x, -y}; }
    point operator*(const T k) const { return {k * x, k * y}; }
    point operator/(const T k) const { return {x / k, y / k}; }
    T operator*(const point &a) const { return x * a.x + y * a.y; } // 点积
    T operator^(const point &a) const { return x * a.y - y * a.x; } // 叉积,注意优先级
    int toleft(const point &a) const
    {
        const auto t = (*this) ^ a;
        return (t > eps) - (t < -eps);
    }                                                             // to-left 测试
    T len2() const { return (*this) * (*this); }                  // 向量长度的平方
    T dis2(const point &a) const { return (a - (*this)).len2(); } // 两点距离的平方

    // 涉及浮点数
    long double len() const { return sqrtl(len2()); }                                                                      // 向量长度
    long double dis(const point &a) const { return sqrtl(dis2(a)); }                                                       // 两点距离
    long double ang(const point &a) const { return acosl(max(-1.0l, min(1.0l, ((*this) * a) / (len() * a.len())))); }      // 向量夹角
    point rot(const long double rad) const { return {x * cosl(rad) - y * sinl(rad), x * sinl(rad) + y * cosl(rad)}; }          // 逆时针旋转(给定角度)
    point rot(const long double cosr, const long double sinr) const { return {x * cosr - y * sinr, x * sinr + y * cosr}; } // 逆时针旋转(给定角度的正弦与余弦)
};

using Point = point<point_t>;

// 极角排序
struct argcmp
{
    bool operator()(const Point &a, const Point &b) const
    {
        const auto t = a ^ b;
        // if (abs(t)<=eps) return a*a<b*b-eps;  // 不同长度的向量需要分开
        return t > eps;
    }
};

// 直线
template <typename T>
struct line
{
    point<T> p, v; // p 为直线上一点,v 为方向向量

    bool operator==(const line &a) const { return v.toleft(a.v) == 0 && v.toleft(p - a.p) == 0; }
    int toleft(const point<T> &a) const { return v.toleft(a - p); } // to-left 测试
    bool operator<(const line &a) const                             // 半平面交算法定义的排序
    {
        if (abs(v ^ a.v) <= eps && v * a.v >= -eps)
            return toleft(a.p) == -1;
        return argcmp()(v, a.v);
    }

    // 涉及浮点数
    point<T> inter(const line &a) const { return p + v * ((a.v ^ (p - a.p)) / (v ^ a.v)); } // 直线交点
    long double dis(const point<T> &a) const { return abs(v ^ (a - p)) / v.len(); }         // 点到直线距离
    point<T> proj(const point<T> &a) const { return p + v * ((v * (a - p)) / (v * v)); }    // 点在直线上的投影
    point<T> symmetry(const point<T> &a) const { return proj(a) * 2 - a;}                    // 点关于直线的对称点 
};

using Line = line<point_t>;

//线段
template <typename T>
struct segment
{
    point<T> a, b;

    bool operator<(const segment &s) const { return make_pair(a, b) < make_pair(s.a, s.b); }

    // 判定性函数建议在整数域使用

    // 判断点是否在线段上
    // -1 点在线段端点 | 0 点不在线段上 | 1 点严格在线段上
    int is_on(const point<T> &p) const
    {
        if (p == a || p == b)
            return -1;
        return (p - a).toleft(p - b) == 0 && (p - a) * (p - b) < -eps;
    }

    // 判断线段直线是否相交
    // -1 直线经过线段端点 | 0 线段和直线不相交 | 1 线段和直线严格相交
    int is_inter(const line<T> &l) const
    {
        if (l.toleft(a) == 0 || l.toleft(b) == 0)
            return -1;
        return l.toleft(a) != l.toleft(b);
    }

    // 判断两线段是否相交
    // -1 在某一线段端点处相交 | 0 两线段不相交 | 1 两线段严格相交
    int is_inter(const segment<T> &s) const
    {
        if (is_on(s.a) || is_on(s.b) || s.is_on(a) || s.is_on(b))
            return -1;
        const line<T> l{a, b - a}, ls{s.a, s.b - s.a};
        return l.toleft(s.a) * l.toleft(s.b) == -1 && ls.toleft(a) * ls.toleft(b) == -1;
    }

    // 点到线段距离
    long double dis(const point<T> &p) const
    {
        if ((p - a) * (b - a) < -eps || (p - b) * (a - b) < -eps)
            return min(p.dis(a), p.dis(b));
        const line<T> l{a, b - a};
        return l.dis(p);
    }

    // 两线段间距离
    long double dis(const segment<T> &s) const
    {
        if (is_inter(s))
            return 0;
        return min({dis(s.a), dis(s.b), s.dis(a), s.dis(b)});
    }

    // 只求整点交点可以不使用浮点数,避免精度问题,使用前需要先判断是否有交点 
    pair<bool, point<T> > int_inter(const segment &s){

        // 线段转为直线的一般式
        auto seg2line = [&](const segment &s){
            T A = s.a.y - s.b.y;
            T B = s.b.x - s.a.x;
            T C = -A * s.a.x - B * s.a.y;
            return array{A, B, C};
        };

        auto [A1, B1, C1] = seg2line(*this);
        auto [A2, B2, C2] = seg2line(s);
        T dx = C1 * B2 - C2 * B1;
        T dy = A1 * C2 - A2 * C1;
        T d = B1 * A2 - B2 * A1;
        if (d == 0) return {false, {}};
        if (dy % d || dx % d) return {false, {}};
        return {true, {dx / d, dy / d}};
    }

};
using Segment = segment<point_t>;

// 多边形
template <typename T>
struct polygon
{
    vector<point<T>> p; // 以逆时针顺序存储

    size_t nxt(const size_t i) const { return i == p.size() - 1 ? 0 : i + 1; }
    size_t pre(const size_t i) const { return i == 0 ? p.size() - 1 : i - 1; }

    // 回转数
    // 返回值第一项表示点是否在多边形边上
    // 对于狭义多边形,回转数为 0 表示点在多边形外,否则点在多边形内
    pair<bool, int> winding(const point<T> &a) const
    {
        int cnt = 0;
        for (size_t i = 0; i < p.size(); i++)
        {
            const point<T> u = p[i], v = p[nxt(i)];
            if (abs((a - u) ^ (a - v)) <= eps && (a - u) * (a - v) <= eps)
                return {true, 0};
            if (abs(u.y - v.y) <= eps)
                continue;
            const Line uv = {u, v - u};
            if (u.y < v.y - eps && uv.toleft(a) <= 0)
                continue;
            if (u.y > v.y + eps && uv.toleft(a) >= 0)
                continue;
            if (u.y < a.y - eps && v.y >= a.y - eps)
                cnt++;
            if (u.y >= a.y - eps && v.y < a.y - eps)
                cnt--;
        }
        return {false, cnt};
    }

    // 射线法 2表示在多边形内,1表示在多边形上,0表示在多边形外
    int is_in(const point<T> &a){
        int x = 0;
        for(size_t i = 0; i < p.size(); i++){
            segment<T> s = {p[i], p[nxt(i)]};
            if (s.is_on(a)) return 1;
            point<T> p1 = p[i] - a, p2 = p[nxt(i)] - a;
            if(p1.y > p2.y) swap(p1, p2);
            if(p1.y < eps && p2.y > eps && (p1 ^ p2) > eps) x = !x;
        }
        return x ? 2 : 0;
    }

    // 多边形面积的两倍
    // 可用于判断点的存储顺序是顺时针或逆时针
    T area() const
    {
        T sum = 0;
        for (size_t i = 0; i < p.size(); i++)
            sum += p[i] ^ p[nxt(i)];
        return sum;
    }

    // 多边形的周长
    long double circ() const
    {
        long double sum = 0;
        for (size_t i = 0; i < p.size(); i++)
            sum += p[i].dis(p[nxt(i)]);
        return sum;
    }
};

using Polygon = polygon<point_t>;

//凸多边形
template <typename T>
struct convex : polygon<T>
{
    // 闵可夫斯基和
    convex operator+(const convex &c) const
    {
        const auto &p = this->p;
        vector<Segment> e1(p.size()), e2(c.p.size()), edge(p.size() + c.p.size());
        vector<point<T>> res;
        res.reserve(p.size() + c.p.size());
        const auto cmp = [](const Segment &u, const Segment &v)
        { return argcmp()(u.b - u.a, v.b - v.a); };
        for (size_t i = 0; i < p.size(); i++)
            e1[i] = {p[i], p[this->nxt(i)]};
        for (size_t i = 0; i < c.p.size(); i++)
            e2[i] = {c.p[i], c.p[c.nxt(i)]};
        rotate(e1.begin(), min_element(e1.begin(), e1.end(), cmp), e1.end());
        rotate(e2.begin(), min_element(e2.begin(), e2.end(), cmp), e2.end());
        merge(e1.begin(), e1.end(), e2.begin(), e2.end(), edge.begin(), cmp);
        const auto check = [](const vector<point<T>> &res, const point<T> &u)
        {
            const auto back1 = res.back(), back2 = *prev(res.end(), 2);
            return (back1 - back2).toleft(u - back1) == 0 && (back1 - back2) * (u - back1) >= -eps;
        };
        auto u = e1[0].a + e2[0].a;
        for (const auto &v : edge)
        {
            while (res.size() > 1 && check(res, u))
                res.pop_back();
            res.push_back(u);
            u = u + v.b - v.a;
        }
        if (res.size() > 1 && check(res, res[0]))
            res.pop_back();
        return {res};
    }

    // 旋转卡壳
    // func 为更新答案的函数,可以根据题目调整位置
    template <typename F>
    void rotcaliper(const F &func) const
    {
        const auto &p = this->p;
        const auto area = [](const point<T> &u, const point<T> &v, const point<T> &w)
        { return (w - u) ^ (w - v); };
        for (size_t i = 0, j = 1; i < p.size(); i++)
        {
            const auto nxti = this->nxt(i);
            func(p[i], p[nxti], p[j]);
            while (area(p[this->nxt(j)], p[i], p[nxti]) >= area(p[j], p[i], p[nxti]))
            {
                j = this->nxt(j);
                func(p[i], p[nxti], p[j]);
            }
        }
    }

    // 凸多边形的直径的平方
    T diameter2() const
    {
        const auto &p = this->p;
        if (p.size() == 1)
            return 0;
        if (p.size() == 2)
            return p[0].dis2(p[1]);
        T ans = 0;
        auto func = [&](const point<T> &u, const point<T> &v, const point<T> &w)
        { ans = max({ans, w.dis2(u), w.dis2(v)}); };
        rotcaliper(func);
        return ans;
    }

    // 判断点是否在凸多边形内
    // 复杂度 O(logn)
    // -1 点在多边形边上 | 0 点在多边形外 | 1 点在多边形内
    int is_in(const point<T> &a) const
    {
        const auto &p = this->p;
        if (p.size() == 1)
            return a == p[0] ? -1 : 0;
        if (p.size() == 2)
            return segment<T>{p[0], p[1]}.is_on(a) ? -1 : 0;
        if (a == p[0])
            return -1;
        if ((p[1] - p[0]).toleft(a - p[0]) == -1 || (p.back() - p[0]).toleft(a - p[0]) == 1)
            return 0;
        const auto cmp = [&](const Point &u, const Point &v)
        { return (u - p[0]).toleft(v - p[0]) == 1; };
        const size_t i = lower_bound(p.begin() + 1, p.end(), a, cmp) - p.begin();
        if (i == 1)
            return segment<T>{p[0], p[i]}.is_on(a) ? -1 : 0;
        if (i == p.size() - 1 && segment<T>{p[0], p[i]}.is_on(a))
            return -1;
        if (segment<T>{p[i - 1], p[i]}.is_on(a))
            return -1;
        return (p[i] - p[i - 1]).toleft(a - p[i - 1]) > 0;
    }

    // 凸多边形关于某一方向的极点
    // 复杂度 O(logn)
    // 参考资料:https://codeforces.com/blog/entry/48868
    template <typename F>
    size_t extreme(const F &dir) const
    {
        const auto &p = this->p;
        const auto check = [&](const size_t i)
        { return dir(p[i]).toleft(p[this->nxt(i)] - p[i]) >= 0; };
        const auto dir0 = dir(p[0]);
        const auto check0 = check(0);
        if (!check0 && check(p.size() - 1))
            return 0;
        const auto cmp = [&](const Point &v)
        {
            const size_t vi = &v - p.data();
            if (vi == 0)
                return 1;
            const auto checkv = check(vi);
            const auto t = dir0.toleft(v - p[0]);
            if (vi == 1 && checkv == check0 && t == 0)
                return 1;
            return checkv ^ (checkv == check0 && t <= 0);
        };
        return partition_point(p.begin(), p.end(), cmp) - p.begin();
    }

    // 过凸多边形外一点求凸多边形的切线,返回切点下标
    // 复杂度 O(logn)
    // 必须保证点在多边形外
    pair<size_t, size_t> tangent(const point<T> &a) const
    {
        const size_t i = extreme([&](const point<T> &u)
                                 { return u - a; });
        const size_t j = extreme([&](const point<T> &u)
                                 { return a - u; });
        return {i, j};
    }

    // 求平行于给定直线的凸多边形的切线,返回切点下标
    // 复杂度 O(logn)
    pair<size_t, size_t> tangent(const line<T> &a) const
    {
        const size_t i = extreme([&](...)
                                 { return a.v; });
        const size_t j = extreme([&](...)
                                 { return -a.v; });
        return {i, j};
    }
};

using Convex = convex<point_t>;
Convex convexhull(vector<Point> p)
{
    vector<Point> st;
    if (p.empty())
        return Convex{st};
    sort(p.begin(), p.end());
    const auto check = [](const vector<Point> &st, const Point &u)
    {
        const auto back1 = st.back(), back2 = *prev(st.end(), 2);
        return (back1 - back2).toleft(u - back1) <= 0;
    };
    for (const Point &u : p)
    {
        while (st.size() > 1 && check(st, u))
            st.pop_back();
        st.push_back(u);
    }
    size_t k = st.size();
    p.pop_back();
    reverse(p.begin(), p.end());
    for (const Point &u : p)
    {
        while (st.size() > k && check(st, u))
            st.pop_back();
        st.push_back(u);
    }
    st.pop_back();
    return Convex{st};
}

int main(){

#ifdef LOCAL
    freopen("data.in", "r", stdin);
    freopen("data.out", "w", stdout);
#endif

    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);

    int n;
    cin >> n;
    vector<Point> p(n);
    for(int i = 0; i < n; i++){
        cin >> p[i].x >> p[i].y;
    }
    auto convex = convexhull(p);
    set<Point> s(convex.p.begin(), convex.p.end());
    vector<Point> v;
    for(auto &pt : p){
        if (!s.contains(pt)){
            v.push_back(pt);
        }
    }

    vector<int> id1(v.size()), id2(v.size());
    iota(id1.begin(), id1.end(), 0);
    iota(id2.begin(), id2.end(), 0);

    int ans = 1;
    for(int i = 0; i < convex.p.size(); i++){
        auto p1 = convex.p[i], p2 = convex.p[(i + 1) % convex.p.size()];
        
        sort(id1.begin(), id1.end(), [&](int x, int y){
            Point a = v[x] - p1;
            Point b = v[y] - p1;
            return (a ^ b) < 0;
        });

        sort(id2.begin(), id2.end(), [&](int x, int y){
            Point a = v[x] - p2;
            Point b = v[y] - p2;
            return (a ^ b) > 0;
        });

        vector<bitset<2000> > bs(v.size());
        bitset<2000> mask;
        for(auto x : id1){
            mask.set(x);
            bs[x] |= mask;
        }
        mask.reset();
        for(auto x : id2){
            mask.set(x);
            bs[x] |= mask;
        }
        for(int j = 0; j < v.size(); j++){
            if (bs[j].count() == v.size()){
                ans += 1;
            }
        }
    }
    cout << ans << '\n';

}

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3504kb

input:

7
1 4
4 0
2 3
3 1
3 5
0 0
2 4

output:

9

result:

ok 1 number(s): "9"

Test #2:

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

input:

5
4 0
0 0
2 1
3 3
3 1

output:

5

result:

ok 1 number(s): "5"

Test #3:

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

input:

3
0 0
3 0
0 3

output:

1

result:

ok 1 number(s): "1"

Test #4:

score: 0
Accepted
time: 1ms
memory: 3524kb

input:

6
0 0
3 0
3 2
0 2
1 1
2 1

output:

7

result:

ok 1 number(s): "7"

Test #5:

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

input:

4
0 0
0 3
3 0
3 3

output:

1

result:

ok 1 number(s): "1"

Test #6:

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

input:

2000
86166 617851
383354 -277127
844986 386868
-577988 453392
-341125 -386775
-543914 -210860
-429613 606701
-343534 893727
841399 339305
446761 -327040
-218558 -907983
787284 361823
950395 287044
-351577 -843823
-198755 138512
-306560 -483261
-487474 -857400
885637 -240518
-297576 603522
-748283 33...

output:

718

result:

ok 1 number(s): "718"

Test #7:

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

input:

2000
571314 -128802
-57762 485216
-713276 485201
-385009 -844644
371507 403789
338703 -272265
-913641 438001
-792118 -481524
709494 213762
-913577 432978
-397111 709021
840950 328210
-843628 452653
-20721 126607
-107804 -338102
930109 -89787
-949115 -76479
-862141 455623
991761 94852
-635475 625573
...

output:

658

result:

ok 1 number(s): "658"

Test #8:

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

input:

2000
-510540 -289561
-602648 -189950
-403224 944455
-369582 -41334
358122 -598933
-817147 470207
-440180 -735160
-705634 61719
319062 897001
-905089 -755682
-408371 -520115
-423336 548115
-590242 835990
208155 883477
-202087 142035
-71545 411206
570690 -673204
-228451 -903435
-732876 -570271
-246755...

output:

309

result:

ok 1 number(s): "309"

Test #9:

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

input:

2000
-532115 566389
138405 49337
398814 -97324
116833 113216
381728 877609
222402 641022
109920 952381
-113880 395181
13780 -572931
-676608 605202
-74328 -503839
-207767 926500
-663270 -146303
197877 280349
275865 -663892
-630214 3286
973786 304855
-493735 841584
394901 -505975
757960 204724
-373328...

output:

239

result:

ok 1 number(s): "239"

Test #10:

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

input:

2000
512636 509804
-661126 -592269
755566 -721837
-878213 441853
-236050 -89069
-181220 155656
203391 691764
940154 260513
747075 373881
620423 840991
-409624 335472
270937 -710659
-751290 -673585
250341 -193243
-250535 618887
-739996 543936
-547741 -213681
-82920 -364319
-611672 737719
930798 46731...

output:

1025

result:

ok 1 number(s): "1025"

Test #11:

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

input:

2000
943353 817289
237151 899722
682851 -464873
854225 205354
834550 257948
-260874 298196
-224572 -269157
-667301 881130
-45920 -696359
-634337 792620
-408527 -947513
582880 172669
921645 839423
833813 721080
-836662 -287230
-55783 -408594
108996 -122012
365647 -789544
313812 833502
970009 -737736
...

output:

218

result:

ok 1 number(s): "218"

Test #12:

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

input:

2000
619248 227987
-252490 -553032
148050 -479727
-333707 -591482
-40488 -503144
561909 255624
-402541 -798967
-245811 -610006
-146584 -517935
226433 -92580
-81939 -828480
72540 -845547
502613 220323
66708 -573015
601886 258752
406443 257854
232970 -671600
-37023 -683767
602339 456757
-440096 -71899...

output:

7

result:

ok 1 number(s): "7"

Test #13:

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

input:

2000
-602451 2956
85982 141739
-185932 -208897
-716095 58215
-468047 155612
-791626 -3105
75700 -484098
609608 -304849
689485 -106857
533177 -285261
-659400 -241162
-369302 165482
406663 265940
-353843 -788313
805885 -75440
-571955 -60471
351360 -81373
-510926 -59456
591713 179588
534794 -118
201630...

output:

66

result:

ok 1 number(s): "66"

Test #14:

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

input:

2000
41203 -675424
-158994 366628
-133859 -595680
435466 687630
687811 -35017
314337 133049
-384711 444777
54850 -760922
526166 282618
572292 94793
-324003 621393
-30308 242225
612969 -231837
-56628 -892609
-492077 58749
29597 -349591
198510 219502
380955 -59845
839171 -40068
88185 -820614
-572977 -...

output:

43

result:

ok 1 number(s): "43"

Test #15:

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

input:

2000
-814040 46114
-324077 -522697
388552 -604274
-252898 43028
-757069 141507
413462 -649779
-281915 -316285
-498931 -573214
-408766 670792
-271435 -393170
87187 731739
89312 -853584
-768680 -307261
-185324 234729
-70493 -354866
16452 164338
-650791 -518077
851196 -259322
-85395 -509349
241593 5074...

output:

129

result:

ok 1 number(s): "129"

Test #16:

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

input:

2000
23103 -796677
-148322 67634
-525131 -446626
2672 584671
-712789 -69579
-91150 -429393
-375635 -487235
-680553 -370975
793181 -383683
-234131 -462420
-734705 -171834
322671 -355011
760005 224249
700248 -352775
416862 -125857
-497951 717254
677084 -451876
-220123 616240
525973 -144881
-300828 553...

output:

1466

result:

ok 1 number(s): "1466"

Test #17:

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

input:

2000
-185174 470373
-772343 -70370
-182314 851727
661615 -250979
-581175 527646
332025 141502
-659052 -506788
-378459 -553180
11233 162287
469975 -572356
679074 217029
-137967 727723
581696 140544
452574 -319370
120895 129820
772655 -330960
122860 823902
-786221 147543
-206152 -373647
-212943 4820
6...

output:

2801

result:

ok 1 number(s): "2801"

Test #18:

score: 0
Accepted
time: 19ms
memory: 4048kb

input:

2000
-718158 695879
655921 595312
-509080 -860718
540612 244159
-83221 -865654
-460513 -542465
102321 -775593
328552 799263
-284269 -725108
152140 549502
-108610 465054
-97837 -449762
-772869 -171472
293831 -711723
508617 -157976
170737 323070
544222 385453
-633043 -233165
-620164 -459706
507218 338...

output:

14445

result:

ok 1 number(s): "14445"

Test #19:

score: 0
Accepted
time: 35ms
memory: 4100kb

input:

2000
-587991 -165467
-530325 -5525
-574943 180654
-496535 -748102
-436469 -160646
110285 237070
-822862 -141480
-177189 327799
-424868 331309
-999274 38095
-745710 192605
-234174 -804258
586432 -176239
-626756 499109
-562606 826724
890245 455480
-32262 -298900
550800 516690
-588632 -368654
405331 -3...

output:

64358

result:

ok 1 number(s): "64358"

Test #20:

score: 0
Accepted
time: 65ms
memory: 4080kb

input:

2000
441575 -414673
651578 -449237
287355 -489950
606811 -30288
-733692 679481
-652568 89883
-360110 616801
190405 -368787
-352383 935855
118240 73038
-374899 -927065
-22183 -491455
-146229 638417
998825 -48442
-374469 243261
988830 149043
-778607 -291542
-277026 -167975
372912 -405043
535321 425727...

output:

233885

result:

ok 1 number(s): "233885"

Test #21:

score: 0
Accepted
time: 79ms
memory: 3960kb

input:

2000
-369265 -366669
-225059 -65255
750236 -107534
-252341 967638
533029 -79205
-482639 504243
-164616 -477455
-219649 975578
222020 297565
-548636 -836060
595498 -345235
-971961 -235140
179392 983777
747498 664263
-458850 -513884
-456639 186799
508542 -359953
630300 5257
-294961 -599723
999627 2729...

output:

430546

result:

ok 1 number(s): "430546"

Test #22:

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

input:

2000
-586906 -809654
-279647 960102
-279925 501031
-76716 526333
-277891 -599253
171606 -289251
565124 -825005
-125381 -163097
-71257 -202933
999551 29949
286017 -698748
257733 358898
6047 18648
283230 -959051
221238 -975219
686818 32684
368089 -929790
-689242 449329
-547431 836850
612952 -790120
-9...

output:

484966

result:

ok 1 number(s): "484966"

Test #23:

score: 0
Accepted
time: 79ms
memory: 3868kb

input:

2000
-360385 -932803
6402 -568575
477942 -878390
361387 -497256
-383874 -126116
-838786 214745
157834 -987465
955879 293759
-91170 -521309
262250 964999
883045 -469287
350745 823160
999731 -23179
-791215 8792
208002 153508
-553609 549966
-345358 591962
-613852 198594
81698 996657
803702 98789
201163...

output:

513300

result:

ok 1 number(s): "513300"

Test #24:

score: 0
Accepted
time: 73ms
memory: 3844kb

input:

2000
-996201 87077
834777 -550587
-316381 948632
750921 -473436
-170208 -985408
-98642 17818
735787 -677212
80294 -996771
-420703 594219
995302 -96813
997685 68003
-680287 396657
-986559 163401
313494 442433
-774277 632845
809816 -586683
-569560 692991
956486 -291775
992620 -121264
998004 -63141
-64...

output:

528222

result:

ok 1 number(s): "528222"

Test #25:

score: 0
Accepted
time: 73ms
memory: 3844kb

input:

2000
-876642 481141
513009 -76454
48555 998820
-665181 11267
-681766 -551841
-724328 30683
-594565 -308913
799027 -601295
390878 658489
300660 953731
-227699 973731
621281 283696
871533 490336
-363638 931539
592572 805516
330089 201429
-282723 -959201
-351348 316419
-5935 -999982
-413615 -910451
-14...

output:

527976

result:

ok 1 number(s): "527976"

Test #26:

score: 0
Accepted
time: 72ms
memory: 3844kb

input:

2000
-496177 868221
-142749 -989758
-999462 -32767
-496370 452632
-50957 -998700
549450 25036
-389116 607514
164685 -287576
546553 837424
-356561 934271
250395 -662914
752586 452605
-803752 594963
-978350 206954
983866 178904
-712386 -247430
494205 -869345
777893 628396
-91446 995809
-373660 927565
...

output:

536419

result:

ok 1 number(s): "536419"

Test #27:

score: 0
Accepted
time: 73ms
memory: 3840kb

input:

2000
-20062 470240
889867 456219
84686 996407
-54908 580599
428693 -903450
-150993 -781447
-437742 -134074
-245186 -299633
216878 730546
-588614 808414
-945245 326360
-72396 -11572
-663429 748238
-538386 842697
463983 400770
716299 697792
161751 -986831
931604 -363474
-466293 884630
163252 -116392
4...

output:

541774

result:

ok 1 number(s): "541774"

Test #28:

score: 0
Accepted
time: 72ms
memory: 3880kb

input:

2000
125380 -992108
876963 480556
-954331 -298750
-872744 488177
-667627 744495
527592 -849497
-41014 -455304
13780 890561
-637070 -474060
858293 513158
-422631 -408446
792248 610198
272933 -962032
768663 -639653
957724 -287686
-655707 -72182
774032 633145
44910 -998991
767034 -220288
32566 -999469
...

output:

554369

result:

ok 1 number(s): "554369"

Test #29:

score: 0
Accepted
time: 71ms
memory: 3908kb

input:

2000
877194 480134
721871 -692027
-657316 -753614
-141802 690188
-984203 -177038
499512 866306
60213 331650
667197 -744880
790745 -612145
526658 70820
-975342 -220697
-818975 126696
-206901 13958
-217847 783500
-498782 460388
214283 -976771
124783 992183
-826617 562763
-869768 -493460
-360542 721516...

output:

556266

result:

ok 1 number(s): "556266"

Test #30:

score: 0
Accepted
time: 70ms
memory: 3888kb

input:

2000
-928276 -371891
693025 -720912
340453 -741801
-315399 948959
-999987 -5058
957766 -287546
-11785 -999930
-480620 876928
-591790 -806091
430900 -490816
232828 972517
709950 -704252
-784773 619782
-40706 -999171
972505 232879
57240 360935
837945 25369
-349605 -537128
-50451 -998726
357173 300683
...

output:

578226

result:

ok 1 number(s): "578226"

Test #31:

score: 0
Accepted
time: 66ms
memory: 3812kb

input:

2000
588463 808523
-653251 -757141
-216959 -976180
620816 -783955
-917704 397264
642866 765978
-965972 -258645
-662131 -749387
919793 -392403
81500 -385642
-860281 -509819
-976258 216610
-881856 -471517
781371 -274463
-769776 638313
996471 -83936
-149837 -988710
88728 -996055
621852 -125590
193779 4...

output:

599788

result:

ok 1 number(s): "599788"

Test #32:

score: 0
Accepted
time: 65ms
memory: 3808kb

input:

2000
-713963 -700183
149576 -48137
-904609 -426240
603724 -34474
-350076 178901
-692350 211723
-777299 -629130
-996510 -83463
343004 -939333
696533 554432
-288734 -640484
798029 602618
-327795 -944748
523003 852330
-49570 998770
263409 254892
-314451 619311
-368911 444305
-289455 -406382
-63806 -648...

output:

607941

result:

ok 1 number(s): "607941"

Test #33:

score: 0
Accepted
time: 65ms
memory: 3844kb

input:

2000
-979883 199570
812775 582577
-257939 966161
-874515 -484998
293436 -242001
749548 -288423
-671752 740775
-12769 999918
295251 955419
175054 -13528
-334691 -942327
539352 -842079
705797 -49973
348168 771901
859906 510451
121051 -572684
909626 -415426
-255421 -545286
962040 272906
-813562 581477
...

output:

605021

result:

ok 1 number(s): "605021"

Test #34:

score: 0
Accepted
time: 64ms
memory: 3920kb

input:

2000
748836 662754
853522 521056
501246 608578
-266167 963926
347098 937828
996632 -82002
300258 -953857
570683 -821169
-399685 -531914
-52991 -536271
-268825 -738298
-440252 449420
936398 350939
-183686 982984
-792809 -609469
-36070 -98167
-769325 638857
957390 288796
-272995 -796868
434336 -294938...

output:

609148

result:

ok 1 number(s): "609148"

Test #35:

score: 0
Accepted
time: 58ms
memory: 3796kb

input:

2000
-75848 997119
-878795 -477199
718319 -695713
-750620 -660733
791233 -261340
734828 678253
-298982 223462
-243124 618205
333026 -942917
-431834 -311408
102455 -779863
839939 542679
-888198 459459
-6972 999975
-989074 147415
619268 -785179
913472 -406900
857133 515094
-490437 715504
187406 842078...

output:

612907

result:

ok 1 number(s): "612907"

Test #36:

score: 0
Accepted
time: 61ms
memory: 3844kb

input:

2000
710449 252021
-605745 -795658
965777 259370
528796 -506543
7488 -999971
130196 134654
205176 -978725
360847 -549034
940307 340325
-878187 -478317
195786 -980646
-965779 -259362
-40526 404237
926277 -376843
659148 752012
799019 -601305
609935 184334
400162 64645
123163 -992386
440739 80681
61275...

output:

613033

result:

ok 1 number(s): "613033"

Test #37:

score: 0
Accepted
time: 61ms
memory: 3832kb

input:

2000
-280012 -148903
382702 395900
551170 834392
138094 -142893
747764 -321810
814783 -579764
855100 -518462
518036 855358
-308932 768160
-746881 -664957
-550707 -834698
-203567 979060
-94882 211708
954151 299324
995262 -97226
995211 97743
-361441 932394
-879179 -476490
492429 -870352
222424 -974949...

output:

613525

result:

ok 1 number(s): "613525"

Test #38:

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

input:

2000
-31467 999504
-691705 722179
330770 -943711
-868142 496314
534209 -845352
-948997 315285
708054 706157
50035 -880465
-926659 375902
883484 -468460
-569126 -321856
-203339 709769
-569574 -821939
-753190 -657801
997229 -74388
-559117 829088
797882 -602812
-145490 822289
-951880 306469
648629 -418...

output:

609202

result:

ok 1 number(s): "609202"

Test #39:

score: 0
Accepted
time: 60ms
memory: 3800kb

input:

2000
-33027 -231537
645986 -17185
894873 -446319
369601 -929190
-858847 512231
759587 -650405
821506 -570199
64855 -997894
770842 637025
532744 -331176
148586 -77740
-903364 -428872
-999964 -8474
-967232 253890
4771 -999988
-238462 -243104
-936126 351663
987061 160340
508004 131675
-413865 910337
18...

output:

610683

result:

ok 1 number(s): "610683"

Test #40:

score: 0
Accepted
time: 58ms
memory: 3816kb

input:

2000
315983 611022
-710308 -71198
-574424 -609685
286803 957989
-365263 930904
605616 -39979
261643 965164
-34821 -681407
971328 237742
-428673 903459
-348540 -413287
-716611 446376
-389197 -921154
-214771 -976664
469821 -882761
-288792 -516000
451431 892305
665222 46114
-712000 702178
-11820 237318...

output:

606866

result:

ok 1 number(s): "606866"

Test #41:

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

input:

2000
827570 -561361
106486 -994314
531932 -846786
85020 -821614
-861275 508137
-944596 328233
-654160 -756355
-599581 330073
-953317 -301970
-337499 541540
867483 497465
674219 -738530
742712 438360
-431377 463380
-976458 -215705
-920911 389771
-603054 797699
-651789 758400
993338 115232
-653951 756...

output:

605654

result:

ok 1 number(s): "605654"

Test #42:

score: 0
Accepted
time: 55ms
memory: 3796kb

input:

2000
660227 -171320
-66161 -85351
683277 -730158
980572 196158
395353 118603
97015 448847
428573 -903506
927991 372602
615713 -506850
-694999 719010
411175 911556
463884 885895
159594 -724246
8242 747837
605323 -795979
878479 -50570
-395291 918555
476675 -879079
593695 804689
-941633 336639
-875114 ...

output:

607199

result:

ok 1 number(s): "607199"

Test #43:

score: 0
Accepted
time: 54ms
memory: 3716kb

input:

2000
-404720 641654
376493 -278480
678653 734458
767939 -640522
-419247 -907872
-664244 69783
627003 -779016
-990939 -134306
346792 544624
136558 -725588
-595202 803575
-234031 -301953
-299941 -953957
-866081 499902
901591 -432588
200283 979738
-699910 714230
812341 -583182
357149 -381610
-957517 28...

output:

603919

result:

ok 1 number(s): "603919"

Test #44:

score: 0
Accepted
time: 53ms
memory: 3732kb

input:

2000
-599904 800071
-887152 -461476
703155 -711035
653695 756757
-230256 -973129
987562 157229
-610508 173456
-405774 110423
859552 -511046
-901289 433216
913048 407850
640724 -767771
999070 43110
209538 -620478
888118 459614
839191 543836
-676657 469821
525241 850953
-563829 -825890
-688034 -725678...

output:

598805

result:

ok 1 number(s): "598805"

Test #45:

score: 0
Accepted
time: 52ms
memory: 3772kb

input:

2000
956636 291284
-998398 -56572
-877970 -478715
-907198 -420702
512527 858670
-435307 900281
-445471 895295
247912 364785
-348233 -937407
-901447 -432888
-571179 820825
392021 -919956
574003 115097
-265057 -355995
912755 408506
-375400 926862
-993241 116070
695920 -718118
-284145 -958781
-472992 8...

output:

598251

result:

ok 1 number(s): "598251"

Test #46:

score: 0
Accepted
time: 45ms
memory: 3832kb

input:

2000
-764451 644681
531916 -198765
281641 -959519
-815218 -579153
-974347 225046
-949358 314195
28285 744344
69688 -997568
-775844 630924
973439 228945
621650 783294
-628873 -777507
29532 390971
778370 -93337
923334 -383997
-648844 -760921
-37277 -471652
975210 221278
535838 -634598
-843132 537705
1...

output:

588592

result:

ok 1 number(s): "588592"

Test #47:

score: 0
Accepted
time: 43ms
memory: 3716kb

input:

2000
113634 993522
296600 -955001
-983491 180954
969414 -245430
346546 -938032
-222652 -54964
-61422 998111
-183247 -983066
-700935 713224
-729527 683951
785401 -618986
734347 267059
-898291 439399
394552 918873
-999754 -22148
-999082 -42823
-261334 -965248
858996 -511981
388846 528044
398694 917083...

output:

580267

result:

ok 1 number(s): "580267"

Test #48:

score: 0
Accepted
time: 49ms
memory: 3840kb

input:

2000
-999844 17617
825619 -564226
-998793 49111
-342117 -939657
-964696 263365
348225 -937410
-534589 845111
972446 -233128
996396 84812
226108 974102
819673 -572831
787248 -616635
584981 -811046
-91377 -845586
399 -999999
-420017 -907516
-990854 134931
-8366 -653975
-971086 -238729
-910547 413403
7...

output:

574822

result:

ok 1 number(s): "574822"

Test #49:

score: 0
Accepted
time: 50ms
memory: 3768kb

input:

2000
-642241 766502
985145 -171722
960869 -277002
-770518 637417
-997009 -77276
389040 -921220
-625503 -780221
785285 619134
-869488 -493952
399502 -269138
605487 795854
-979953 -199227
-141150 -989988
-59731 -998214
-372142 -928175
430982 -902360
377383 926057
-253882 781247
-610587 -791948
-15523 ...

output:

569661

result:

ok 1 number(s): "569661"

Test #50:

score: 0
Accepted
time: 19ms
memory: 3716kb

input:

2000
-628838 -357590
978524 206130
-759844 650104
325497 945542
743026 669261
-626067 779768
809046 587744
785675 -618639
999954 9576
-917782 397082
594121 804375
479925 174875
362584 -392818
471020 -882122
-958352 -285587
203295 -979117
-101902 -994794
-307252 -951628
-522875 -852408
-999478 -32304...

output:

324930

result:

ok 1 number(s): "324930"

Test #51:

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

input:

2000
973483 228755
-923152 -384434
-974475 224492
-951197 308583
-301050 -953608
623065 782169
-4460 -999990
-347338 937739
-999141 41423
328894 -944366
-695142 -718871
840009 -542572
-226507 974009
472259 -881459
903505 428576
-559822 -828612
642699 766118
548513 -836141
764272 644893
178154 984002...

output:

180726

result:

ok 1 number(s): "180726"

Test #52:

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

input:

2000
-784353 -620314
995900 90455
-116566 -993182
881042 473036
177991 -984032
-999969 7783
655203 755452
-779179 626800
-181243 -983438
274776 -961507
609151 -793054
-1362 -843519
-566798 -823856
-530993 -847375
-951795 306733
62564 -998040
-959361 282180
-964809 -262948
185709 982604
-913941 40584...

output:

95123

result:

ok 1 number(s): "95123"

Test #53:

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

input:

2000
-378825 -925468
260691 -965422
854263 519839
-132682 -991158
-992506 122194
159239 987240
-986433 164163
-821638 -570008
936600 350399
-542405 840116
-116212 -993224
214672 976686
493136 -869952
-970476 241194
-744228 667925
-942833 333263
-884817 -465937
-941813 336134
714086 -700057
-931887 -...

output:

39222

result:

ok 1 number(s): "39222"

Test #54:

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

input:

2000
-982363 -186982
-654678 -755907
-468244 -883598
-999061 43307
-487654 873036
-996826 79600
-712944 -701220
-878254 -478193
-803280 595601
832745 -553656
-997294 73507
-969828 243790
449635 -893212
-180210 983627
582389 -812909
509250 860618
-845162 534508
-949329 314282
-976802 -214139
-414704 ...

output:

19811

result:

ok 1 number(s): "19811"

Test #55:

score: 0
Accepted
time: 1ms
memory: 3736kb

input:

2000
-944717 -327884
24164 -999707
988832 149033
545249 838273
54412 998518
996706 -81087
-632826 774293
971372 237560
-588936 -808179
-721351 -692569
909375 -415975
947390 320078
490265 -871573
770999 -636835
-877832 478968
-364048 -931380
995651 -93159
177569 -984108
945090 -326808
-107026 -994256...

output:

1

result:

ok 1 number(s): "1"

Extra Test:

score: 0
Extra Test Passed