Submission #1123071

#TimeUsernameProblemLanguageResultExecution timeMemory
1123071noteceStove (JOI18_stove)C++20
100 / 100
23 ms2316 KiB
// Author: ChungNotTrung;
// Created: 2024-12-02 14:33:08
// Problem: None
// Tag: None
// Source: None
#include <bits/stdc++.h>
using namespace std;

#ifdef LOCAL
#include "C:\DEBUG\debugtemplate.cpp"
#else
#define debug(...)
#endif

#define ll long long
#define db long double
#define int long long

#define fi first
#define se second
#define pb push_back
#define ii pair<int, int>
#define vi vector<int>
#define vii vector<ii>
#define vvi vector<vi>
#define vvvi vector<vvi>
#define All(x) x.begin(), x.end()

#define file(name) fopen(name ".inp", "r") ? freopen(name ".inp", "r", stdin), freopen(name ".out", "w", stdout) : 0
#define file_trau(name) fopen(name ".inp", "r") ? freopen(name ".inp", "r", stdin), freopen(name ".ans", "w", stdout) : 0
#define Faster ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define Run_time cerr << " Time : " << (1.0 * clock() / CLOCKS_PER_SEC) << " s.\n"

#define bit(i, n) (1ll && ((1ll << i) & (n)))
#define ONBIT(i, mask) ((1ll << i) | (mask))
#define OFFBIT(i, mask) ((~(1ll << i)) & (mask))
#define MASK(n) (1ll << (n))
#define cnt_bit(n) (__builtin_popcountll(n))
#define Lg2(n) (63 - __builtin_clzll(n))

#define rep(i, x, n) for (int i = x; i <= n; ++i)
#define repd(i, n, x) for (int i = n; i >= x; --i)
#define REP(i, n) for (int i = 0; i < (int)(n); ++i)
#define repv(i, n) for (auto &i : n)

#define as_vi(v, n, val) v.assign(n + 1, val)
#define as_vvi(v, n, m, val) v.assign(n + 1, vi(m + 1, val))
#define as_vvvi(v, n, m, k, val) v.assign(n + 1, vvi(m + 1, vi(k + 1, val)))

#define left(id) (id << 1ll)
#define right(id) (id << 1ll | 1)

mt19937 rd(chrono::steady_clock().now().time_since_epoch().count());
int rng(int l, int r) { return uniform_int_distribution<int>(l, r)(rd); }
vi dx{0, 0, 1, -1, 1, 1, -1, -1};
vi dy{1, -1, 0, 0, -1, 1, -1, 1};

template <int D, typename T>
struct Vec : public vector<Vec<D - 1, T>>
{
    static_assert(D >= 1, "Vector dimension must be greater than zero!");
    template <typename... Args>
    Vec(int n = 0, Args... args) : vector<Vec<D - 1, T>>(n, Vec<D - 1, T>(args...))
    {
    }
};
template <typename T>
struct Vec<1, T> : public vector<T>
{
    Vec(int n = 0, const T &val = T()) : vector<T>(n, val)
    {
    }
};

template <class X, class Y>
bool maximize(X &a, const Y &b)
{
    if (a < b)
        return a = b, true;
    return false;
}

template <class X, class Y>
bool minimize(X &a, const Y &b)
{
    if (a > b)
        return a = b, true;
    return false;
}
const int base = 311;
const int nmax = 1e6 + 10;
const int oo = 1e18 + 100;
const int MOD = 1e9 + 7;
int sqr(int x)
{
    return x * x;
}

int POW(int a, int n)
{
    int res = 1;
    while (n > 0)
    {
        if (n % 2 == 1)
            res = (res * a) % MOD;
        a = (a * a) % MOD;
        n /= 2;
    }
    return res;
}

void fixmod(int &val)
{
    if (val < 0)
        val = (val + MOD * MOD) % MOD;
    if (val >= MOD)
        val %= MOD;
}

int ntest;
int n, k;
int a[nmax];
namespace sub2
{
    int f[5005][5005];
    void solve()
    {
        rep(i, 1, n)
        {
            f[1][i] = a[i] - a[1] + 1;
        }
        rep(c, 2, k)
        {
            rep(i, 1, n)
            {
                f[c][i] = oo;
                repd(j, i - 1, 1)
                {
                    minimize(f[c][i], f[c - 1][j] + a[i] - a[j + 1] + 1);
                }
            }
        }
        cout << f[k][n];
    }
}
namespace full
{
    void solve()
    {
        priority_queue<int> pq;
        int sum = 0;
        rep(i, 1, n - 1)
        {
            pq.push(a[i + 1] - a[i] - 1);
        }
        sum = a[n] - a[1] + 1;
        rep(i, 2, k)
        {
            int x = pq.top();
            pq.pop();
            sum -= x;
        }
        cout << sum;
    }
};
void TryHard()
{
    cin >> n >> k;
    rep(i, 1, n)
    {
        cin >> a[i];
    }
    sort(a + 1, a + 1 + n);
    // sub2::solve();
    full::solve();
}
main()
{

    // Learning is like rowing upstream, not to advance is to drop back .
    // A winner never stops trying .
    Faster;
    file("JOI18_stove");
    // file_trau("");
    ntest = 1;
    // cin >> ntest;
    while (ntest--)
    {
        TryHard();
        cout << "\n";
    }
}

// LIMIT :

/*   /\_/\
    ( ._. )
    / >C< \
*/

Compilation message (stderr)

stove.cpp:198:11: warning: backslash-newline at end of file
  198 |     / >C< \
      |            
stove.cpp:177:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  177 | main()
      | ^~~~
stove.cpp: In function 'int main()':
stove.cpp:29:53: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   29 | #define file(name) fopen(name ".inp", "r") ? freopen(name ".inp", "r", stdin), freopen(name ".out", "w", stdout) : 0
      |                                              ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
stove.cpp:183:5: note: in expansion of macro 'file'
  183 |     file("JOI18_stove");
      |     ^~~~
stove.cpp:29:87: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   29 | #define file(name) fopen(name ".inp", "r") ? freopen(name ".inp", "r", stdin), freopen(name ".out", "w", stdout) : 0
      |                                                                                ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
stove.cpp:183:5: note: in expansion of macro 'file'
  183 |     file("JOI18_stove");
      |     ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...