Submission details
Task:Point in Polygon
Sender:UnoK-admin
Submission time:2025-11-10 17:02:41 +0200
Language:C++ (C++20)
Status:READY
Result:
Test results
testverdicttime
#10.01 sdetails
#2ACCEPTED0.02 sdetails
#3ACCEPTED0.00 sdetails
#4ACCEPTED0.00 sdetails
#5ACCEPTED0.01 sdetails
#6ACCEPTED0.00 sdetails
#70.01 sdetails
#8ACCEPTED0.00 sdetails
#9ACCEPTED0.00 sdetails
#10ACCEPTED0.00 sdetails
#11ACCEPTED0.00 sdetails
#12ACCEPTED0.00 sdetails
#13ACCEPTED0.00 sdetails
#14UNKNOWN--details

Code

#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define pb push_back
#define VI vector<int>
#define AR(x) array<int, x>
#define MX vector<VI >
#define all(x) x.begin(), x.end()
#define IOS cin.tie(0)->sync_with_stdio(0)

using namespace std;

mt19937 rng32(chrono::steady_clock::now().time_since_epoch().count());
mt19937_64 rng64(chrono::steady_clock::now().time_since_epoch().count());

double rnd(){
    return uniform_real_distribution<double>(0, 1)(rng32);
}
int rnd(int a, int b){
    return uniform_int_distribution<int>(a, b)(rng32);
}

using C = complex<ll>;

int main(){

    int n, m;
    cin >> n >> m;

    vector<C > p(n);
    
    ll ma = 0;
    for(auto &c : p){
        ll x, y;
        cin >> x >> y;
        c = {x, y};
        ma = max(ma, x);
    }

    auto cross = [](C a, C b){ return (conj(a)*b).imag(); };

    for(int i=0; i<m; i++){
        C a, b; ll xx, yy;
        cin >> xx >> yy;
        a = {xx, yy};
        b = {ma+123, yy+1};
        int cnt = 0;
        bool boundary = 0;
        for(int j=0; j<n; j++){
            auto p1 = p[j];
            auto p2 = p[(j+1)%n];
            ll s1 = cross(a-p1, a-p2);
            ll s2 = cross(b-p1, b-p2);
            ll s3 = cross(p1-a, p1-b);
            ll s4 = cross(p2-a, p2-b);
            if(s1 == 0){
                C a1 = a-p1, a2 = a-p2;
                if(a1.real()*a2.real()+a1.imag()*a2.imag() < 0) boundary = true;
            }
            if((s1 > 0) != (s2 > 0) && (s3 > 0) != (s4 > 0)) cnt++;
        }
        if(boundary) cout << "BOUNDARY\n";
        else if(cnt&1) cout << "INSIDE\n";
        else cout << "OUTSIDE\n";
    }

    return 0;
}

Test details

Test 1

Verdict:

input
100 1000
-7 -19
91 77
100 100
64 60
...

correct output
INSIDE
OUTSIDE
INSIDE
INSIDE
INSIDE
...

user output
INSIDE
OUTSIDE
INSIDE
INSIDE
INSIDE
...
Truncated

Feedback: Incorrect character on line 343 col 1: expected "BOUNDARY", got "OUTSIDE"

Test 2

Verdict: ACCEPTED

input
1000 1000
365625896 -113418831
278762563 38777445
250367343 -96991975
175866909 -129766978
...

correct output
OUTSIDE
OUTSIDE
INSIDE
OUTSIDE
OUTSIDE
...

user output
OUTSIDE
OUTSIDE
INSIDE
OUTSIDE
OUTSIDE
...
Truncated

Test 3

Verdict: ACCEPTED

input
4 1
1 5
5 5
5 1
1 1
...

correct output
INSIDE

user output
INSIDE

Test 4

Verdict: ACCEPTED

input
4 1
1 5
5 5
5 1
1 1
...

correct output
OUTSIDE

user output
OUTSIDE

Test 5

Verdict: ACCEPTED

input
4 1
1 100
2 50
1 20
0 50
...

correct output
INSIDE

user output
INSIDE

Test 6

Verdict: ACCEPTED

input
8 1
0 0
0 2
1 1
2 2
...

correct output
INSIDE

user output
INSIDE

Test 7

Verdict:

input
4 4
0 0
3 0
3 4
0 4
...

correct output
INSIDE
BOUNDARY
OUTSIDE
BOUNDARY

user output
INSIDE
OUTSIDE
OUTSIDE
BOUNDARY

Feedback: Incorrect character on line 2 col 1: expected "BOUNDARY", got "OUTSIDE"

Test 8

Verdict: ACCEPTED

input
6 1
0 0
0 2
3 1
2 2
...

correct output
INSIDE

user output
INSIDE

Test 9

Verdict: ACCEPTED

input
3 1
0 0
1 1000000000
-3 0
1 1

correct output
OUTSIDE

user output
OUTSIDE

Test 10

Verdict: ACCEPTED

input
3 1
-100000 0
-1000000000 -999999999
1000000000 1000000000
0 0

correct output
OUTSIDE

user output
OUTSIDE

Test 11

Verdict: ACCEPTED

input
3 1
-100000 0
-999999999 -1000000000
1000 1000
0 0

correct output
INSIDE

user output
INSIDE

Test 12

Verdict: ACCEPTED

input
4 1
-4 1
-6 1
-6 -1
-4 -1
...

correct output
INSIDE

user output
INSIDE

Test 13

Verdict: ACCEPTED

input
3 1
0 10
0 -10
10 0
1 0

correct output
INSIDE

user output
INSIDE

Test 14

Verdict: UNKNOWN

input
3 1000
-536621709 -536621709
955833081 955833081
-1 1
-439278425 -439278425
...

correct output
BOUNDARY
BOUNDARY
BOUNDARY
BOUNDARY
BOUNDARY
...

user output
(not available)