답안 #1071252

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1071252 2024-08-23T06:16:06 Z 정민찬(#11138) Cultivation (JOI17_cultivation) C++17
0 / 100
2000 ms 348 KB
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pll;

const ll inf = 2e18;

ll R, C;
ll N;

ll solve(vector<pll> p, ll H1, ll H2) {
    vector<pll> upd;
    for (ll i=0; i<p.size(); i++) {
        upd.push_back({max(1LL, p[i].first - H1), p[i].second});
        upd.push_back({min(R, p[i].first + H2) + 1, -p[i].second});
    }
    sort(upd.begin(), upd.end());
    ll l = 0, r = 0, sum = 0;
    vector<ll> cur;
    for (ll i=0; i<upd.size(); i++) {
        if (upd[i].first > R) break;
        if (upd[i].second > 0) {
            cur.push_back(upd[i].second);
            sort(cur.begin(), cur.end());
        }
        else {
            bool flag = false;
            for (ll j=0; j<cur.size(); j++) {
                if (cur[j] == -upd[i].second) {
                    cur.erase(cur.begin() + j);
                    flag = true;
                    break;
                }
            }
            assert(flag);
        }
        if (i + 1 != upd.size() && upd[i].first == upd[i+1].first) continue;
        if (cur.empty()) {
            return inf;
        }
        l = max(l, cur[0] - 1);
        r = max(r, C - cur.back());
        for (ll j=0; j+1<cur.size(); j++) {
            sum = max(sum, cur[j+1] - cur[j] - 1);
        }
    }
    return max(l+r, sum);
}

int main() {
    ios_base :: sync_with_stdio(false); cin.tie(NULL);
    cin >> R >> C;
    cin >> N;
    vector<pll> p(N);
    for (ll i=0; i<N; i++) {
        cin >> p[i].first >> p[i].second;
    }
    sort(p.begin(), p.end());
    ll ans = inf;
    for (ll i=0; i<=R-1; i++) {
        for (ll j=0; j<=R-1; j++) {
            ans = min(ans, i + j + solve(p, i, j));
        }
    }
    cout << ans << '\n';
}

Compilation message

cultivation.cpp: In function 'll solve(std::vector<std::pair<long long int, long long int> >, ll, ll)':
cultivation.cpp:15:19: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   15 |     for (ll i=0; i<p.size(); i++) {
      |                  ~^~~~~~~~~
cultivation.cpp:22:19: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |     for (ll i=0; i<upd.size(); i++) {
      |                  ~^~~~~~~~~~~
cultivation.cpp:30:27: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |             for (ll j=0; j<cur.size(); j++) {
      |                          ~^~~~~~~~~~~
cultivation.cpp:39:19: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |         if (i + 1 != upd.size() && upd[i].first == upd[i+1].first) continue;
      |             ~~~~~~^~~~~~~~~~~~~
cultivation.cpp:45:25: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |         for (ll j=0; j+1<cur.size(); j++) {
      |                      ~~~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2037 ms 348 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2037 ms 348 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -