QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#482100#5067. Two Wallssunyuheng365WA 152ms3748kbC++1411.4kb2024-07-17 17:15:362024-07-17 17:15:37

Judging History

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

  • [2024-07-17 17:15:37]
  • 评测
  • 测评结果:WA
  • 用时:152ms
  • 内存:3748kb
  • [2024-07-17 17:15:36]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define endl '\n'

const int N = 5e3 + 5;
using point_t = __int128_t;
constexpr point_t eps = 0;
constexpr long double PI = 3.1415926535897932384L;

__int128_t abs(__int128_t x) { return x < 0 ? -x : x; }

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 {x * k, y * k}; }
    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; }
    // 判断向量 a 在当前向量哪一侧 (1:左侧 / 0:平行 / -1:右侧)
    int toleft(const point &a) const
    {
        const auto t = (*this) ^ a;
        return (t > eps) - (t < -eps);
    }
    // 向量长度的平方
    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.L, min(1.L, ((*this) * a) / (len() * a.len())))); }
    // 逆时针旋转指定角度
    point rot(const long double rad) const { return {x * cos(rad) - y * sin(rad), x * sin(rad) + y * cos(rad)}; }
    // 给定余弦值正弦值逆时针旋转
    point rot(const long double cosr, const long double sinr) const { return {x * cosr - y * sinr, x * sinr + y * cosr}; }
    int quad() const
    {
        if (y < -eps) // 下平面(三四象限, 包含 y 轴负半轴)
            return 1;
        if (y > eps) // 上平面(一二象限, 包含 y 轴正半轴)
            return 4;
        if (x < -eps) // x 轴负半轴
            return 5;
        if (x > eps) // x 轴正半轴
            return 3;
        return 2; // 原点
    };
};

using Point = point<point_t>;

// 极角排序
struct argcmp
{
    bool operator()(const Point &a, const Point &b) const
    {
        // 判断象限
        const auto quad = [](const Point &a)
        {
            if (a.y < -eps) // 下平面(三四象限, 包含 y 轴负半轴)
                return 1;
            if (a.y > eps) // 上平面(一二象限, 包含 y 轴正半轴)
                return 4;
            if (a.x < -eps) // x 轴负半轴
                return 5;
            if (a.x > eps) // x 轴正半轴
                return 3;
            return 2; // 原点
        };
        const int qa = quad(a), qb = quad(b);
        if (qa != qb) // 象限不同直接判
            return qa < qb;
        const auto t = a ^ b; // 判断向量 b 是否在向量 a 的左侧, 等同 a.toleft(b)
        // if (abs(t) <= eps) // 分离不同长度向量
        //     return a * a < b * b - eps;
        return t > eps;
    }
    // bool operator()(const Point &a, const Point &b) const
    // {
    //     // atan2 不带脑子丢精度方法
    //     return atan2l(a.y, a.x) < atan2l(b.y, b.x);
    // }
};

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; }
    // 检测点在直线的哪一侧 (1:左侧 / 0:在直线上 / -1:右侧)
    int toleft(const point<T> &a) const { return v.toleft(a - p); }

    // 半平面交排序
    bool operator<(const line &a)
    {
        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)); }
};

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:点严格在线段上, 叉积用浮点数时精度注意有问题, 两个 10^9 级别叉积极大概率炸掉 10^(-9) 的 eps
    int is_on(const point<T> &p) const
    {
        if (p == a || p == b)
            return -1;
        // 点严格在线段上 = 向量 AP 与向量 BP 平行 且 异向
        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;
    }

    // 判断两线段相交
    // -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
    {
        // 角 PAB 或 角 PBA > 90 度
        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)});
    }
};

using Segment = segment<point_t>;

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

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

    // 回转数
    // 返回值第一项表示点是否在多边形上
    // 对于狭义多边形, 回转数为 0 表示点在多边形外, 否则点在多边形内
    pair<bool, int> winding(const point<T> &a) const
    {
        // 这里我们引出射线方向为 x 轴正方向
        int cnt = 0;
        for (int i = 0; i < (int)p.size(); i++)
        {
            const point<T> u = p[i], v = p[nxt(i)];
            // 叉积判断点 a 是否在直线 uv 上, 点积判断点 a 是否和某个端点重合或 u, v 两点在点 a 异侧
            if (abs((a - u) ^ (a - v)) <= eps && (a - u) * (a - v) <= eps)
                return {true, 0};
            // 该线段和 x 轴平行, 向上浮动后视作无交点
            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;
            // (u.y < v.y) 指向北方, 点在其左侧, 且点的纵坐标位于指定 Range
            if (u.y < a.y - eps && v.y >= a.y - eps)
                cnt++;
            // (u.y > v.y) 指向南方, 点在其右侧, 且点的纵坐标位于指定 Range
            if (u.y >= a.y - eps && v.y < a.y - eps)
                cnt--;
        }
        return {false, cnt};
    }
    T area() const
    {
        T sum = 0;
        for (int i = 0; i < (int)p.size(); i++)
            sum += p[i] ^ p[nxt(i)];
        return sum;
    }
    long double circ() const
    {
        long double sum = 0;
        for (int i = 0; i < (int)p.size(); i++)
            sum += p[i].dis(p[nxt(i)]);
        return sum;
    }
};
using Polygon = polygon<point_t>;

int n;
Point a[N];

void solve()
{
    Point A, B, C, D, E, F;

    int a[12];
    for (int i = 0; i < 12; i++)
        cin >> a[i];

    A.x = a[0], A.y = a[1];
    B.x = a[2], B.y = a[3];
    C.x = a[4], C.y = a[5], D.x = a[6], D.y = a[7];
    E.x = a[8], E.y = a[9], F.x = a[10], F.y = a[11];

    Segment AB{A, B}, CD{C, D}, EF{E, F};
    if (AB.is_inter(CD) == 0 && AB.is_inter(EF) == 0)
        return std::cout << 0 << endl, void();

    if (C == D || E == F || CD.is_inter(EF) != 1 ||
        Line{C, D - C}.toleft(A) == 0 ||
        Line{C, D - C}.toleft(B) == 0 ||
        Line{E, F - E}.toleft(A) == 0 ||
        Line{E, F - E}.toleft(B) == 0) // 退化
        return std::cout << 1 << endl, void();

    for (Point u : {C, D, E, F})
        for (Point v : {C, D, E, F})
        {
            // A -> u
            // B -> v
            Line AU{A, u - A}, BV{B, v - B};

            bool flg = (BV.toleft(A) == -1 ? Line{A, B - A}.toleft(u) != 1 && Line{A, BV.v}.toleft(u) == 1
                                           : Line{A, B - A}.toleft(u) != -1 && Line{A, BV.v}.toleft(u) == -1);

            auto judge = [&](Segment x, Line y)
            {
                if (x.is_inter(y) && (x.is_on(y.p) || x.is_on(y.p + y.v) ||                                         // 射线和线段有交点
                                      Line{x.a, x.b - x.a}.toleft(y.p) != Line{x.a, x.b - x.a}.toleft(y.p + y.v) || // 射线上有两点在线段异侧
                                      abs((x.b - x.a) ^ (y.p - x.a)) > abs((x.b - x.a) ^ (y.p + y.v - x.a))))       // 射线上在线段同侧的两点围成的三角形面积变化
                {
                    if (x.is_on(u) && y.toleft(u) == 0) // 交点是 u
                        return true;
                    if (x.is_on(v) && y.toleft(v) == 0) // 交点是 v
                        return true;
                    return false;
                }
                return true;
            };
            if (flg && judge(CD, AU) && judge(CD, BV) && judge(EF, AU) && judge(EF, BV))
                return std::cout << 1 << endl, void();
        }

    std::cout << 2 << endl, void();
}

signed main()
{
#ifndef sunyuheng365
    ios::sync_with_stdio(false);
#endif
    int tc = 1;
    cin >> tc;
    while (tc--)
        solve();
#ifdef sunyuheng365
    system("pause");
#endif
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 3664kb

input:

3
0 0
1 1
2 2 3 3
4 4 5 5
0 0
1 1
2 2 3 3
2 2 3 3
0 0
10 10
10 0 0 10
1 1 2 2

output:

0
0
1

result:

ok 3 number(s): "0 0 1"

Test #2:

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

input:

2
-999999999 999999998
999999999 999999998
-1000000000 -1000000000 1000000000 1000000000
1000000000 -1000000000 -1000000000 1000000000
-999999999 999999998
999999999 999999998
-999999998 -999999998 1000000000 1000000000
999999998 -999999998 -1000000000 1000000000

output:

2
1

result:

ok 2 number(s): "2 1"

Test #3:

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

input:

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

output:

0

result:

ok 1 number(s): "0"

Test #4:

score: 0
Accepted
time: 123ms
memory: 3684kb

input:

100000
-851839419 34688642
-667081997 395784949
-624068418 -155389155 119194510 -758711821
-992436155 -812775173 851861070 -592596572
974613003 -179673992
-485749861 520596304
-115838823 -265233646 -573799007 -222234500
608830643 -887109945 483106217 -906910755
-597593284 384264657
940783 476657007
...

output:

0
0
0
0
0
0
1
0
0
0
0
1
0
0
1
1
0
0
1
1
1
0
1
0
0
1
0
1
0
0
0
0
0
1
0
0
1
0
1
0
0
0
0
0
1
1
1
1
1
0
1
1
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
0
1
0
0
0
0
1
1
1
1
1
1
0
0
0
1
1
1
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
1
1
0
1
1
0
0
0
0
0
0
1
0
1
1
0
1
0
0
1
0
0
1
1
0
0
0
1
0
1
0
1
0
0
0
1
1
...

result:

ok 100000 numbers

Test #5:

score: 0
Accepted
time: 112ms
memory: 3700kb

input:

100000
-496405053 -492673762
111401587 764822338
-588077735 774345046 959995351 -972693439
-729349041 -573156496 326664422 645305810
-477016787 -561855978
697257071 461011057
-416669921 377733217 784674141 -204150537
695471214 -642123788 -968584097 801626277
-329331824 68483816
945230774 982358552
-...

output:

1
1
1
1
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
1
1
0
1
1
1
1
1
0
1
1
0
1
1
1
0
0
1
1
0
1
0
0
0
0
0
1
0
0
0
0
0
0
1
0
1
1
0
1
0
1
0
0
0
0
1
1
0
1
1
0
0
0
1
1
1
1
1
1
0
1
1
0
0
0
0
0
1
0
1
0
1
1
1
0
1
1
1
1
1
1
1
1
0
0
0
0
0
1
0
1
0
0
1
1
0
1
0
1
0
1
0
0
1
1
1
0
0
0
0
0
0
0
1
1
1
1
...

result:

ok 100000 numbers

Test #6:

score: 0
Accepted
time: 120ms
memory: 3748kb

input:

100000
153996608 390029247
838007668 -918017777
-257119758 -244043252 390730779 813324945
-761229221 -38570526 634492154 -116791808
19475923 760994742
-119735998 991360398
-665623518 -632455126 -394909798 -481033868
-974798424 140919454 -715241704 510163308
-61070363 -542264319
-353569028 -511939904...

output:

1
0
0
1
1
1
0
0
0
1
1
0
1
1
0
0
0
1
0
1
1
1
1
0
1
1
1
1
0
1
0
0
0
1
1
0
0
1
0
0
1
1
0
0
0
1
0
0
0
1
0
1
1
0
1
0
1
0
1
1
1
0
0
0
1
0
0
0
0
0
1
1
1
0
0
0
1
0
1
0
0
1
0
1
1
0
1
0
1
0
0
1
0
0
0
0
0
0
1
0
1
1
0
0
1
0
0
0
0
1
0
0
1
0
1
1
0
1
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
1
1
1
1
0
0
1
0
0
0
...

result:

ok 100000 numbers

Test #7:

score: 0
Accepted
time: 152ms
memory: 3744kb

input:

100000
509430974 -432300451
-140418957 -600857890
-464218867 442601156 -768468380 61286241
-203174812 201048150 404262799 826143280
567846134 673780049
525213848 983652653
-671487323 600446325 963563350 -462949905
-888157854 628995403 -166932017 218700340
207191097 898865049
590720963 288728935
4143...

output:

0
0
0
1
0
0
1
1
0
0
1
0
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
1
1
0
1
1
0
1
0
0
0
0
0
0
1
0
1
0
1
1
0
0
0
0
0
0
1
0
1
1
0
0
0
1
1
0
0
0
0
0
0
1
0
1
0
1
0
0
0
1
1
1
0
0
0
1
1
0
0
0
1
0
0
0
0
1
1
0
0
1
0
1
1
0
1
1
1
0
0
0
0
0
0
0
1
1
1
0
0
1
1
0
0
0
0
0
0
1
1
1
0
1
0
0
1
0
0
0
0
0
1
1
0
1
0
...

result:

ok 100000 numbers

Test #8:

score: 0
Accepted
time: 123ms
memory: 3628kb

input:

100000
-840167367 450402558
586187125 -231820501
-428228185 -627664644 367299755 142271917
59912302 735634121 469000739 64045662
-935661158 291598063
-291779221 -780965301
-920440920 -409742018 -216020590 965199471
-801517283 -587961356 -156679415 465294457
423575055 583084208
-759956341 794430480
8...

output:

1
1
1
0
0
1
0
0
0
1
0
0
0
1
0
0
0
1
0
0
0
1
0
1
0
1
0
0
0
1
1
0
0
1
0
0
1
1
1
0
1
0
1
0
0
1
0
0
0
1
1
1
0
0
0
0
0
0
1
1
0
1
0
1
0
0
0
1
0
1
1
0
1
0
0
1
0
0
1
1
1
0
1
1
0
0
0
0
0
0
1
0
0
0
1
0
0
1
1
0
0
1
0
1
1
1
0
0
0
0
1
1
0
0
0
0
1
1
0
0
1
0
0
0
0
1
0
0
1
1
1
0
1
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
...

result:

ok 100000 numbers

Test #9:

score: 0
Accepted
time: 131ms
memory: 3624kb

input:

100000
-779700294 -76959846
-340361999 380306679
-392237502 58979764 -201964817 -314799493
28032122 -729779910 -56195909 -454962165
-387290947 -142461426
891227711 -493705752
778727982 823159433 899362766 983283434
-471786920 -48007905 391630272 173831488
691836515 -322631221
236211152 -699867976
-3...

output:

0
0
0
0
0
1
0
0
1
1
0
1
0
0
1
0
0
0
0
1
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
0
1
0
1
0
0
0
0
0
1
0
1
1
1
0
0
0
1
1
0
1
0
0
0
1
0
1
0
0
1
0
0
0
0
0
0
0
1
1
1
1
0
0
0
1
0
0
0
0
0
1
1
0
0
1
0
0
0
1
0
1
0
0
0
0
0
1
0
0
1
1
1
1
0
1
0
0
0
0
0
0
1
1
0
0
0
1
0
0
1
0
0
0
0
1
0
0
1
0
1
0
1
1
0
0
0
...

result:

ok 100000 numbers

Test #10:

score: 0
Accepted
time: 126ms
memory: 3616kb

input:

100000
-181176136 805743163
681211377 454376774
-599336611 988713965 638836024 -823748404
586086531 -490161233 251631822 782940218
-133888029 -524643413
74234642 -553290999
529774386 -533873706 -332098675 -998632604
-385146349 735035338 350005371 -412598775
960097976 -638412062
-819498858 -194166431...

output:

1
0
1
1
1
0
1
0
0
1
0
0
0
1
1
0
0
1
0
1
0
0
1
0
0
0
0
0
1
0
1
0
1
1
1
0
1
1
1
1
1
1
0
0
0
0
1
0
1
1
0
1
1
0
1
0
1
0
0
1
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
1
1
0
0
1
0
0
1
0
0
0
1
0
0
0
1
0
1
1
0
1
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
1
0
0
1
1
0
0
0
1
0
0
0
1
1
0
0
0
1
1
0
0
0
0
0
0
1
0
0
0
0
1
...

result:

ok 100000 numbers

Test #11:

score: 0
Accepted
time: 123ms
memory: 3680kb

input:

100000
469225525 -311553829
-592182543 -933496047
-268378634 -29674334 -225395842 -985852520
849173645 44424737 21402468 20842600
657571974 -906825400
-742758427 -266031450
228943287 455937953 783284681 724484066
-593473073 -776888715 603347764 -460971951
-528550773 -954192903
-170176161 68445323
76...

output:

1
1
0
0
1
1
1
0
1
0
0
0
0
0
1
1
1
0
0
1
0
1
1
0
1
0
1
1
1
0
0
0
0
1
1
1
0
1
1
1
0
0
1
0
0
0
0
1
1
0
1
0
1
0
0
0
1
0
0
0
0
1
1
0
0
1
0
0
0
1
1
0
0
0
0
0
0
1
0
1
1
0
0
0
1
1
1
0
1
1
1
1
1
0
0
0
0
1
0
0
0
0
0
0
1
0
0
1
1
1
0
0
1
0
0
1
1
1
1
1
1
0
0
1
1
0
1
0
1
1
0
1
0
1
0
1
1
0
1
1
0
1
0
0
0
0
1
0
1
0
...

result:

ok 100000 numbers

Test #12:

score: 0
Accepted
time: 99ms
memory: 3700kb

input:

100000
824659891 866116474
429390833 -564458658
-232387951 656970075 910372293 505198569
817293465 579010708 86140408 963777688
616007597 416025321
440248505 -325616697
-20010310 -311160598 -101331964 742568030
-506832502 -236935264 -848342550 -752434920
-850223901 435058963
825991332 574146868
-776...

output:

1
0
0
0
1
1
1
0
0
1
0
0
1
0
1
0
1
1
0
1
0
0
0
1
0
0
1
1
0
0
1
0
1
1
0
0
0
1
1
0
0
1
0
0
1
1
0
1
0
1
1
0
0
0
0
0
1
0
0
1
0
1
0
0
0
0
0
1
0
1
1
0
0
0
1
0
0
0
0
1
0
0
0
0
1
0
0
0
1
1
0
1
0
1
0
1
0
1
1
1
1
1
0
1
1
0
0
1
1
0
0
0
0
1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
0
1
0
1
0
0
1
0
0
1
1
0
0
1
0
1
1
1
...

result:

ok 100000 numbers

Test #13:

score: 0
Accepted
time: 116ms
memory: 3652kb

input:

100000
-181402541 -196228170
624722764 328251238
783857631 682518931 547715844 969228879
823684584 -149364638 -913952210 833196798
62726516 -554264004
664711179 426420047
-418659204 986117749 725195722 -692340474
963934566 206423874 688322091 -850621504
-259681786 -92095128
52318280 220754482
262610...

output:

1
1
0
1
0
0
0
1
1
0
0
0
1
0
0
1
0
1
1
0
0
0
0
1
1
0
1
1
0
1
1
0
0
0
0
0
1
1
0
0
1
0
0
0
0
1
1
0
0
0
0
0
1
0
0
1
1
0
1
1
0
0
1
1
1
1
0
0
0
0
1
0
0
1
0
1
0
0
0
1
1
1
0
0
0
1
1
0
0
0
0
0
1
1
0
0
1
0
1
0
1
1
1
0
1
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
1
1
0
0
1
0
1
0
0
1
0
0
1
1
0
0
1
0
1
0
1
1
1
...

result:

ok 100000 numbers

Test #14:

score: 0
Accepted
time: 136ms
memory: 3684kb

input:

100000
417121618 686474839
-353703861 697288626
-885184394 -630836661 -611483316 755247261
-618261009 -204713255 855818437 -223868114
316129433 -641478697
-152281890 661802094
-962580095 219019198 -159420924 -969223805
-654457570 989467117 -763368223 562948234
251669466 -702843263
996608271 -9785766...

output:

0
0
1
0
0
0
0
1
0
0
1
0
0
0
0
1
0
0
0
1
1
1
1
0
0
0
0
0
1
1
0
1
1
0
0
0
1
0
1
0
0
0
1
0
0
0
0
0
0
1
1
0
0
1
0
0
1
1
1
0
0
1
1
0
1
0
0
1
0
0
0
1
0
0
1
1
0
0
1
0
0
0
1
0
1
0
0
1
1
0
0
0
1
1
0
1
0
0
1
0
1
1
0
1
0
0
0
1
0
0
0
0
1
0
1
0
1
0
1
1
0
0
1
0
1
1
0
1
0
0
0
0
1
1
0
0
0
1
0
0
1
1
1
0
0
0
0
1
0
1
...

result:

ok 100000 numbers

Test #15:

score: 0
Accepted
time: 103ms
memory: 3684kb

input:

100000
-932476723 -135854859
667869515 -985551488
-849193711 593864833 819252113 298175852
-650141189 329872715 -836353833 -985965732
-892410565 976339317
-969274959 654094349
-968443900 -791169144 660995138 -951139842
-567817000 -470579434 -510025830 566452559
519930927 686408603
-302191531 -472875...

output:

1
0
1
1
0
0
1
1
0
0
0
1
0
0
1
1
1
0
0
0
0
0
1
0
1
1
1
1
1
1
0
0
1
1
0
1
0
1
1
0
0
1
0
0
0
0
1
0
0
1
0
0
0
1
0
0
1
0
0
0
0
1
0
0
1
0
0
0
1
1
1
0
1
1
0
1
0
0
0
0
0
0
1
1
0
1
0
1
0
0
0
1
1
1
0
1
0
0
0
0
0
0
1
0
1
0
1
0
1
0
0
0
1
0
1
0
1
1
1
1
1
0
1
1
0
1
0
1
0
0
1
0
1
0
1
0
0
1
1
1
1
0
0
0
0
0
1
0
0
0
...

result:

ok 100000 numbers

Test #16:

score: 0
Accepted
time: 128ms
memory: 3700kb

input:

100000
-577042357 -958184557
-553646903 -616514099
-761325526 -719490759 -44979753 -210773060
-387054074 864458686 638449520 546903944
-639007648 299190036
213731973 889476396
782602504 -148202282 19468285 -933055879
-238086637 17496515 -204805935 518079383
493225093 127537970
642098459 32826410
215...

output:

0
0
0
0
1
0
1
0
0
0
1
0
1
1
0
0
1
0
0
0
1
0
1
0
0
1
1
0
1
1
1
1
1
1
1
0
1
0
0
1
1
0
1
1
1
0
0
0
0
0
0
0
1
0
1
1
1
1
1
0
0
1
1
1
0
0
0
1
1
0
0
0
1
1
0
0
1
1
1
1
1
1
1
1
1
1
0
0
0
1
0
1
0
0
0
0
1
1
0
1
0
0
0
1
0
1
0
0
0
1
0
1
1
1
1
0
1
1
0
0
1
0
0
0
1
0
0
1
0
1
0
0
1
0
0
0
0
0
0
1
0
0
0
0
1
0
0
1
1
1
...

result:

ok 100000 numbers

Test #17:

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

input:

100000
-516575284 219485746
172959179 -299354213
979697864 -32846351 795821088 -372877176
171000334 -895922639 703187460 -510160968
-142514938 -82991950
-308293802 881768651
776738700 -915300832 839884347 790060792
-151446066 800539757 48536459 226616414
709609051 -188242871
-656701343 538527956
912...

output:

0
0
1
1
1
1
0
0
1
1
0
0
0
1
1
0
0
0
0
1
1
0
0
0
1
1
0
0
1
0
1
1
1
1
0
1
0
0
0
1
0
0
1
0
0
1
0
0
0
0
0
0
1
0
0
0
1
1
0
0
1
1
0
0
1
0
1
0
0
0
1
0
0
1
1
1
1
0
0
1
1
0
1
0
0
0
1
0
0
0
0
0
1
1
1
1
1
0
0
0
0
0
0
1
1
0
0
0
1
1
0
1
0
1
0
0
1
0
1
1
0
1
1
0
1
1
0
0
0
0
0
0
0
0
0
0
1
1
0
1
1
0
1
0
0
0
0
1
0
1
...

result:

ok 100000 numbers

Test #18:

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

input:

100000
133826376 -897811246
-805467447 69683176
-984311454 896887850 226556516 -881826087
139120154 -361336668 472958105 727741414
110887979 -465173937
631623338 -882849303
475907601 74510826 -44732299 513177461
-359772790 -416417001 596846146 -64846555
977870511 -798991006
287588648 -955770500
-633...

output:

0
0
0
1
0
0
0
0
0
1
0
1
1
0
0
1
0
1
1
0
0
0
0
1
0
1
0
1
0
0
1
0
1
0
0
0
0
1
1
0
0
1
1
0
0
0
0
0
0
0
1
0
1
1
0
0
0
1
0
0
0
0
0
1
0
1
1
0
0
0
0
1
0
0
0
0
1
1
1
1
1
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
1
0
1
1
1
0
0
0
0
0
0
0
1
0
0
1
0
0
1
0
0
1
1
0
0
0
1
0
1
0
0
0
0
1
0
0
0
1
1
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
...

result:

ok 100000 numbers

Test #19:

score: 0
Accepted
time: 135ms
memory: 3668kb

input:

100000
489260742 -15108237
-78861365 681810357
-896443270 -416467743 -932642644 904192296
402207268 173249302 537696045 -329323498
902347982 -899233426
-480337024 -595589754
-68013290 -692587724 -981226446 531261424
-30042427 123536449 850188539 -356309523
-753868029 885228154
936911345 -450068955
1...

output:

1
1
1
0
0
0
1
0
1
1
1
1
0
0
1
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
1
1
1
1
0
1
0
1
0
0
1
0
0
0
0
0
1
0
0
1
1
1
0
0
1
1
1
0
0
0
0
0
0
1
0
0
1
0
0
1
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
1
0
0
1
0
1
0
1
1
0
0
1
0
0
0
0
0
1
0
1
1
0
1
0
0
0
0
1
1
0
0
0
0
0
1
0
0
1
0
1
0
1
0
0
1
0
0
1
0
1
1
1
1
0
0
...

result:

ok 100000 numbers

Test #20:

score: 0
Accepted
time: 128ms
memory: 3616kb

input:

100000
-617247806 -542470641
699622219 998970243
-860452587 565143960 203125491 447120886
960261677 707835273 550556483 908578885
-844249102 718584588
702669908 -360207707
-73877095 297223934 -160810384 254378093
56598144 611612398 -601501775 -109715406
-780573863 569447313
-361888457 350599884
5702...

output:

1
1
0
0
1
1
0
0
0
0
1
0
1
1
1
0
0
1
0
0
1
1
0
1
1
0
1
0
0
0
1
1
1
1
0
0
1
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
1
1
0
0
0
0
0
1
0
0
1
0
0
1
0
1
0
0
0
0
0
0
1
1
0
1
1
1
1
0
1
0
1
0
0
0
0
0
1
0
0
0
1
0
0
0
0
1
0
1
0
1
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
1
0
0
0
0
1
1
1
0
0
1
0
0
1
0
0
0
0
0
1
0
0
...

result:

ok 100000 numbers

Test #21:

score: 0
Accepted
time: 140ms
memory: 3620kb

input:

100000
-261813440 340232368
-573771701 -631992369
-529494610 -505121840 -661106375 233139268
928381497 947453949 320327128 389571058
-52789098 336402602
-114323161 -124825660
-617797985 940190796 659605678 272462056
143238715 -605344361 -591249174 -401178375
-269222611 -41300822
877368828 856301429
...

output:

1
0
0
0
0
0
0
1
0
0
1
1
1
0
1
1
0
0
1
1
1
1
1
0
0
0
0
0
0
1
1
1
0
1
0
1
1
1
1
1
1
1
1
1
0
0
1
1
1
0
0
1
1
0
1
1
0
1
1
0
1
0
1
0
0
1
0
0
1
1
0
0
1
0
1
0
0
0
0
0
0
0
1
0
0
0
1
0
1
0
1
0
0
1
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
1
0
0
1
1
0
1
0
1
0
1
1
0
0
0
0
0
0
0
0
0
0
0
1
0
1
0
0
1
0
0
0
0
...

result:

ok 100000 numbers

Test #22:

score: 0
Accepted
time: 139ms
memory: 3612kb

input:

100000
-201346367 -482097330
742768969 -19865188
-736593719 -113444726 474661760 -223932141
-808531390 -517960081 90097774 -667493854
200613819 -45779385
-931316230 -132533405
-623661790 -69997546 18078824 -4421275
767936371 -65390910 -337906780 -987608637
-961151 -652048957
-473308476 -637997027
-5...

output:

1
0
0
0
0
0
1
0
0
1
0
1
1
1
1
1
0
1
0
1
0
0
1
1
1
0
1
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
1
0
0
1
1
0
0
0
0
0
0
0
0
0
0
1
0
1
1
1
0
0
0
1
0
1
1
1
0
0
0
1
0
0
1
0
1
1
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
1
1
0
0
0
0
1
1
0
1
0
1
0
1
0
0
1
1
0
1
1
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
1
0
0
0
...

result:

ok 100000 numbers

Test #23:

score: 0
Accepted
time: 128ms
memory: 3596kb

input:

100000
889700307 83152852
81040013 -449413311
374958682 300600303 -247400099 -855076598
-624900532 -785317715 857266066 -410224840
872271274 -850603331
-975572718 973091933
421906561 -222540906 -675309230 591089749
-544630032 -809400213 70027428 -810848022
902977690 -179653965
-183689299 262567523
7...

output:

0
1
0
0
1
1
0
0
0
1
1
0
1
0
0
1
0
0
0
1
1
1
0
0
1
0
0
0
1
0
0
0
0
0
1
0
1
0
1
1
1
1
0
1
0
1
1
0
0
0
0
1
0
0
0
0
0
1
0
1
1
2
1
0
0
1
1
0
0
1
1
1
1
1
1
0
0
0
1
0
1
0
0
0
0
1
0
0
1
1
1
1
0
0
0
1
0
0
0
0
1
0
0
0
1
1
0
1
1
1
1
0
0
0
1
1
1
1
0
0
1
0
0
0
1
1
0
0
0
1
1
1
0
1
0
0
0
0
1
0
0
0
0
1
1
1
1
0
0
1
...

result:

ok 100000 numbers

Test #24:

score: 0
Accepted
time: 56ms
memory: 3620kb

input:

45369
0 0
0 -1
999999997 999999997 -999999997 -999999998
-999999997 -999999997 999999997 999999998
0 0
0 -1
999999997 999999997 -999999997 -1000000000
-999999997 -999999997 999999997 999999998
0 0
0 -1
999999997 999999997 -999999998 -999999997
-999999997 -999999997 999999997 999999998
0 0
0 -1
99999...

output:

1
0
0
1
1
0
0
1
0
0
0
1
0
0
1
1
0
0
1
0
0
0
1
0
0
1
1
0
0
1
0
0
0
2
1
1
2
2
1
1
2
1
1
1
1
0
0
1
1
0
0
1
0
0
0
1
0
0
1
1
0
0
1
0
0
0
2
1
1
2
2
1
1
2
1
1
1
2
1
1
2
2
1
1
2
1
1
1
1
0
0
1
1
0
0
1
0
0
0
1
0
0
1
1
0
0
1
0
0
0
2
1
1
2
2
1
1
2
1
1
1
2
1
1
2
2
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
1
1
0
0
...

result:

ok 45369 numbers

Test #25:

score: -100
Wrong Answer
time: 99ms
memory: 3664kb

input:

100000
-1 -1
0 -2
2 1 0 0
-1 1 1 -1
-2 -1
-2 -1
0 -1 -1 0
2 2 0 -2
0 2
1 -2
0 -2 -2 0
2 -1 -2 0
0 2
-2 -2
-2 0 2 1
1 2 1 0
1 0
1 -1
0 -1 2 0
2 2 1 2
2 1
0 0
-2 1 1 2
-1 1 -1 2
0 0
2 1
2 -2 -2 1
-2 -2 1 -2
-1 -1
1 2
-2 -2 0 1
-2 1 -1 -2
-2 1
-1 1
-1 2 2 0
-1 2 -2 -2
0 2
0 1
1 -2 1 0
1 1 0 0
2 1
1 -2
...

output:

0
0
1
1
1
0
0
0
1
0
1
1
0
0
0
0
1
0
0
0
0
1
0
0
1
1
1
0
0
0
0
0
0
1
1
0
0
0
1
0
0
1
1
1
0
0
1
0
1
0
0
0
1
0
0
0
0
1
0
1
1
1
0
1
0
0
1
1
0
1
1
1
1
0
1
0
1
0
1
1
0
0
0
0
1
0
1
0
1
1
1
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
1
0
0
1
1
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
...

result:

wrong answer 166th numbers differ - expected: '1', found: '2'