Submission #1247530

#TimeUsernameProblemLanguageResultExecution timeMemory
1247530TobZvijezda (COCI19_zvijezda)C++20
110 / 110
79 ms2120 KiB
#include <bits/stdc++.h> #define F first #define S second #define all(x) x.begin(), x.end() #define pb push_back #define FIO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0) using namespace std; typedef long long ll; typedef long double ld; typedef pair <ll, ll> pii; typedef pair <ld, ld> pdd; const int N = 1e5 + 7; int n, t; pii co[N]; bool ccw(pdd x, pdd y, pdd z) {return x.F*(y.S-z.S)+y.F*(z.S-x.S)+z.F*(x.S-y.S)>0;} bool check(int x, pii y) { return !ccw(co[(x+1)%n], co[x], y); } int get(int l, pii p, bool sid) { int lo = 0, hi = n/2; if (!sid) { while (lo < hi) { int mid = (lo+hi+1)/2; if (check(l+mid-1, p)) lo = mid; else hi = mid-1; } return lo; } while (lo < hi) { int mid = (lo+hi+1)/2; if (check(l+n/2-mid, p)) lo = mid; else hi = mid-1; } return lo; } int main () { FIO; cin >> t >> n; for (int i = 0; i < n; i++) cin >> co[i].F >> co[i].S; ll q, cnt = 0; cin >> q; while (q--) { ll a, b; cin >> a >> b; a ^= t*cnt*cnt*cnt; b ^= t*cnt*cnt*cnt; pii p = {a, b}; int o = check(0, p), o2 = check(n/2, p); int res = 0; if (o == o2) { if (o) res = 1; } else { int sum = 0; if (o) sum += get(0, p, 0); else sum += get(0, p, 1); if (o2) sum += get(n/2, p, 0); else sum += get(n/2, p, 1); res = (sum > n/2); } cout << (res ? "DA\n" : "NE\n"); cnt += res; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...