답안 #846332

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
846332 2023-09-07T13:37:01 Z vjudge1 KOVANICE (COI15_kovanice) C++17
0 / 100
2 ms 860 KB
#include <bits/stdc++.h>

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
#define PB push_back
#define POB pop_back
#define ordered_set                              \
    tree<int, null_type, less<int>, rb_tree_tag, \
         tree_order_statistics_node_update>
#define int int64_t
#define F first
#define S second
#define I insert
#define sqr(a) ((a) * (a))
#define P pop
#define max3(a, b, c) (max(a, max(b, c)))
#define max4(a, b, c, d) (max(max(a, b), max(c, d)))
#define min3(a, b, c) (min(a, min(b, c)))
#define min4(a, b, c, d) (min(min(a, b), min(c, d)))
#define MOD 1000000007
#define mod 998244353
int binpow(int a, int p, int m = MOD) {
    int ans = 1;
    while (p) {
        if (p & 1) ans = ((ans % m) * (a % m)) % m;
        a = sqr(a) % m;
        p >>= 1;
    }
    return ans;
}
vector<pair<int, int>> p, v;
int totar = 0;
int area2(int A, int B, int C) {
    auto a = v[A], b = v[B], c = v[C];
    double ab = sqrt(sqr(a.F - b.F) + sqr(a.S - b.S)),
           ac = sqrt(sqr(a.F - c.F) + sqr(a.S - c.S)),
           bc = sqrt(sqr(c.F - b.F) + sqr(c.S - b.S));
    double u = (ab + ac + bc) / double(2);
    return ceil((double(2) * sqrt(u * (u - ac) * (u - ab) * (u - bc))) - 0.5);
}
int calc(int L, int R, int area) {
    auto l = v[L], r = v[R];
    r.F -= l.F;
    r.S -= l.S;
    swap(r.F, r.S);
    r.S *= -1;
    for (int i = 0; i < p.size(); i++) {
        int ans = (p[i].F - l.F) * r.F + (p[i].S - l.S) * r.S;
        if (ans >= 0) return 0;
    }
    return area;
}
void solve() {
    int n, m;
    cin >> n;
    v.assign(n, {0, 0});
    for (int i = 0; i < n; i++) cin >> v[i].F >> v[i].S;
    for (int i = 2; i < n; i++) {
        totar += area2(0, i - 1, i);
    }
    cin >> m;
    p.assign(m, {0, 0});
    for (int i = 0; i < m; i++) cin >> p[i].F >> p[i].S;
    int maxi = 0;
    for (int i = 0; i < n; i++) {
        int curr = 0;
        for (int j = (i + 2) % n; j != ((i - 1 + n) % n); j = (j + 1) % n) {
            curr += area2(i, (j - 1 + n) % n, j);
            if (abs(j - i) <= 1) continue;
            int ansi = calc(i, j, curr);
            if (ansi == 0) break;
            maxi = max(maxi, ansi);
        }
    }
    cout << maxi << endl;
}
int32_t main() {
    int t = 1;
    // cin >> t;
    while (t--) {
        solve();
    }
}

Compilation message

kovanice.cpp: In function 'int64_t calc(int64_t, int64_t, int64_t)':
kovanice.cpp:49:23: warning: comparison of integer expressions of different signedness: 'int64_t' {aka 'long int'} and 'std::vector<std::pair<long int, long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |     for (int i = 0; i < p.size(); i++) {
      |                     ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 2 ms 600 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 2 ms 604 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 2 ms 604 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 2 ms 860 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -