Submission #496192

#TimeUsernameProblemLanguageResultExecution timeMemory
496192model_codeKućice (COCI21_kucice)C++17
110 / 110
116 ms344 KiB
#include<bits/stdc++.h> using namespace std; typedef long long llint; typedef pair <llint, llint> pi; const int MAXN = 1005; const int MOD = 1000000007; int n, pivot_idx; int x[MAXN], y[MAXN]; int pot[MAXN]; llint ccw (pi a, pi b, pi c) { return a.first * (b.second - c.second) + b.first * (c.second - a.second) + c.first * (a.second - b.second); } int add (int x, int y) {x += y; if (x >= MOD) return x - MOD; return x;} int sub (int x, int y) {x -= y; if (x < 0) return x + MOD; return x;} int mul (int x, int y) {return (llint) x * y % MOD;} int halfplane (int i) { if (y[i] > y[pivot_idx]) return 1; if (y[i] < y[pivot_idx]) return -1; if (x[i] > x[pivot_idx]) return 1; if (x[i] < x[pivot_idx]) return -1; return 0; } bool cmp (int i, int j) { int hi = halfplane(i); int hj = halfplane(j); if (hi != hj) return hi > hj; return ccw({x[i], y[i]}, {x[pivot_idx], y[pivot_idx]}, {x[j], y[j]}) < 0; } void precompute () { pot[0] = 1; for (int i = 1; i < MAXN; i++) { pot[i] = mul(pot[i - 1], 2); } } int calc_sol_for_pivot () { vector <int> v; for (int i = 0; i < n; i++) { if (i == pivot_idx) continue; v.push_back(i); } sort(v.begin(), v.end(), cmp); int res = 1; int j = 0, cnt = 1; for (int i = 0; i < v.size(); i++) { while (1) { int nxt_j = (j + 1) % (n - 1); if (nxt_j == i) break; if (ccw({x[v[i]], y[v[i]]}, {x[v[nxt_j]], y[v[nxt_j]]}, {x[pivot_idx], y[pivot_idx]}) < 0) break; j = nxt_j; cnt++; } res = add(res, pot[cnt - 1]); if (j == i) { cnt = 1; j = (j + 1) % (n - 1); } else { cnt--; } } return res; } int main () { ios_base::sync_with_stdio(false); cin.tie(0); precompute(); cin >> n; for (int i = 0; i < n; i++) { cin >> x[i] >> y[i]; } if (n == 1) { cout << 1; return 0; } int sol = 0; for (pivot_idx = 0; pivot_idx < n; pivot_idx++) { sol = add(sol, calc_sol_for_pivot()); } sol = sub(mul(n, pot[n]), sol); cout << sol; return 0; }

Compilation message (stderr)

Main.cpp: In function 'int calc_sol_for_pivot()':
Main.cpp:56:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |     for (int i = 0; i < v.size(); i++) {
      |                     ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...