QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#126785#2784. Alienssomethingnew#Compile Error//C++202.0kb2023-07-18 23:49:172024-07-04 00:45:21

Judging History

你现在查看的是最新测评结果

  • [2024-07-04 00:45:21]
  • 评测
  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-07-18 23:49:17]
  • 提交

answer

//  ↘ ⬇ ⬇ ⬇ ⬇ ⬇ ↙
//  ➡ @roadfromroi ⬅
//  ↗ ⬆ ⬆ ⬆ ⬆ ⬆ ↖
#include <iostream>
#include "vector"
#include "algorithm"
#include "numeric"
#include "climits"
#include "iomanip"
#include "bitset"
#include "cmath"
#include "map"
#include "deque"
#include "array"
#include "set"
#include "aliens.h"
#define all(x) x.begin(), x.end()
using namespace std;
typedef long long ll;
ll sq(ll a) {
    return a * a;
}
pair<ll, int> reba(int n, vector<pair<int, int>> opp, ll cc) {
    vector<int> cnt(n + 1);
    vector<ll> dp(n + 1, 1e18);
    dp[0] = 0;
    for (int i = 0; i < n; ++i) {
        for (int j = i + 1; j <= n; ++j) {
            ll vl = dp[i] + sq(opp[i].first - opp[j-1].second - 1) + cc;
            if (dp[j] > vl) {
                dp[j] = vl;
                cnt[j] = cnt[i] + 1;
            }
        }
    }
    return {dp[n], cnt[n]};
}
ll take_photos(int n, int m, int k, vector<int> re, vector<int> c) {
    vector<pair<int, int>> sgg(n);
    for (int i = 0; i < n; ++i) {
        sgg[i] = {min(re[i], c[i]), max(re[i], c[i])};
    }
    sort(all(sgg));
    vector<pair<int, int>> bb;
    for (auto [l, r] : sgg) {
        while (!bb.empty() and l == bb.back().first)
            bb.pop_back();
        if (bb.empty() or bb.back().second < r) {
            bb.push_back({l, r});
        }
    }
    sgg = bb;
    n = sgg.size();
    ll l = 0, r = (ll)1e14;
    while (l + 1 < r) {
        ll m = l + r >> 1ll;
        if (reba(n, sgg, m).second >= k) {
            l = m;
        } else {
            r = m;
        }
    }
    //cout << l << endl;
    pair<ll, int> val = reba(n, sgg, l);
    return val.first - l * val.second + l * (k-val.second);
}
int main() {
    int n, m, k;
    assert(3 == scanf("%d %d %d", &n, &m, &k));
    std::vector<int> r(n), c(n);
    for (int i = 0; i < n; i++) {
        assert(2 == scanf("%d %d", &r[i], &c[i]));
    }
    long long ans = take_photos(n, m, k, r, c);


    printf("%lld\n", ans);
    return 0;
}

Details

answer.code: In function ‘int main()’:
answer.code:69:5: error: ‘assert’ was not declared in this scope
   69 |     assert(3 == scanf("%d %d %d", &n, &m, &k));
      |     ^~~~~~
answer.code:17:1: note: ‘assert’ is defined in header ‘<cassert>’; did you forget to ‘#include <cassert>’?
   16 | #include "aliens.h"
  +++ |+#include <cassert>
   17 | #define all(x) x.begin(), x.end()