답안 #1111357

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1111357 2024-11-12T07:34:35 Z hungcubuso1vn Feast (NOI19_feast) C++17
100 / 100
492 ms 20484 KB
#include         <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

#pragma             GCC   optimize("O3")
#pragma             GCC   optimize("Ofast")
#pragma             GCC   optimize("unroll-loops")

#define            TASK   ""
#define              ll   long long
#define             ull   unsigned ll
#define              db   long double
#define             pLL   pair<ll, ll>
#define             pLI   pair<ll, int>
#define             pIL   pair<int, ll>
#define             pII   pair<int, int>
#define             vec   vector
#define              vL   vec<ll>
#define             vvL   vec<vL>
#define              vI   vec<int>
#define             vvI   vec<vI>
#define            vvvI   vec<vvI>
#define           vvvvI   vec<vvvI>
#define              vD   vec<db>
#define             vvD   vec<vD>
#define             vLL   vec<pLL>
#define             vLI   vec<pLI>
#define             vIL   vec<pIL>
#define             vII   vec<pII>
#define            vvII   vec<vII>
#define              vS   vec<string>
#define             vvS   vec<vS>
#define              vB   vec<bool>
#define             vvB   vec<vB>
#define            umap   unordered_map
#define          gphash   gp_hash_table
#define            mset   multiset
#define            pque   priority_queue
#define          all(a)   a.begin(), a.end()
#define         rall(a)   a.rbegin(), a.rend()
#define       stt(a, n)   a.begin(), a.begin() + n
#define       stf(a, n)   a.begin() + n, a.end()
#define              eb   emplace_back
#define              pb   push_back
#define              pf   push_front
#define            popb   pop_back
#define            popf   pop_front
#define             ins   insert
#define             asg   assign
#define             rev   reverse
#define              fi   first
#define              se   second
#define              th   third
#define              ub   upper_bound
#define              lb   lower_bound
#define             ite   iterator
#define           fs(n)   fixed << setprecision(n)

using         namespace   std;
using         namespace   __gnu_pbds;

const ll          llINF = 1e18;
const int        intINF = 1e9;
const ll            MOD = 1e9 + 7;
const ll            LIM = 1e5;

template<   class T   >   
using       ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define            oset   ordered_set

template<     class A, 
              class B, 
              class C >   struct triple {
    A fi; B se; C th;

    triple() {}
    triple(A a,B b,C c) : fi(a), se(b), th(c) {}
};
#define            tIII   triple<int, int, int>
#define            tLLL   triple<ll, ll, ll>
#define            vIII   vec<tIII>
#define           vvIII   vec<vIII>
#define            vLLL   vec<tLLL>

mt19937                   Rand(chrono::high_resolution_clock::now().time_since_epoch().count());

inline int     read() { 
    char c;    while (c = getchar(), c != '-' && (c < '0' || c > '9'));
    bool           sign = (c == '-'); if (sign) c = getchar(); int n = c - '0';
    while (           c = getchar(), c >= '0' && c <= '9') n = 10 * n + c - '0';
    return     ((!sign) ? n : -n ); }

vI          prime, lpf;
void  primeSieve(int n)   { prime.asg(1, 2); lpf.asg(n + 1, 2); lpf[0] = lpf[1] = 1;
                            for (int i = 3; i <= n; i += 2) { if (lpf[i] == 2) { lpf[i] = i; prime.pb(i); } 
                            for (int j = 0; j < prime.size() && i * prime[j] <= n && prime[j] <= lpf[i]; ++ j) lpf[i * prime[j]] = prime[j]; 
                          } }
vvI                dvs;
void    dvsSieve(int n)   { dvs.asg(n + 1, vI());
                            for (int i = 1; i <= n; ++ i) {
                            for (int j = i; j <= n; j += i) 
                            dvs[j].pb(i);  
                          } }

template<   class T   >   bool maximize(T &a, T b) { if (b > a) return a = b, 1; return 0; }
template<   class T   >   bool minimize(T &a, T b) { if (b < a) return a = b, 1; return 0; }

ll      gcd(ll a, ll b)   { return b ? gcd(b, a % b) : a; }
ll      lcm(ll a, ll b)   { return a / gcd(a, b) * b; }

ll  fastPow(ll n, ll p,
            ll m = MOD)   { ll r = 1; for (n %= m; p; p >>= 1) { if (p & 1) (r *= n) %= m; (n *= n) %= m; } return r; }
ll         invMod(ll n, 
            ll m = MOD)   { return fastPow(n, m - 2, m); }

ll          mask(int i)   { return i < 0 ? 0 : 1LL << i; }
bool   bit(ll n, int i)   { return n >> i & 1LL; }
#define        popcount   __builtin_popcountll
#define             clz   __builtin_clzll
#define             ctz   __builtin_ctzll

//__________________________________________________________________________________________________//

void init() {}

void solve() {
    int N, K; cin >> N >> K;
    vI A(N);
    for (int &num : A) cin >> num;

    auto calc = [&](ll mmb) -> pLL {
        vec<vLL> DP(2, vLL(N));
        DP[0][0] = {0, 0};
        DP[1][0] = {A[0] - mmb, 1};
        for (int i = 1; i < N; ++ i) {
            DP[0][i] = max(DP[0][i - 1], DP[1][i - 1]);
            DP[1][i] = max(
                pLL(DP[0][i - 1].fi + A[i] - mmb, DP[0][i - 1].se + 1),
                pLL(DP[1][i - 1].fi + A[i], DP[1][i - 1].se)
            );
        }
        return max(DP[0][N - 1], DP[1][N - 1]);
    };

    ll lef = 1, rig = llINF, res = 0;
    while (lef <= rig) {
        ll mid = lef + rig >> 1;
        pLL tmp = calc(mid);
        if (tmp.se >= K)
            res = mid,
            lef = mid + 1;
        else
            rig = mid - 1;
    }

    cout << calc(res).fi + res * K;
}

signed main() {

    if (fopen(TASK".inp", "r")) {
        freopen(TASK".inp", "r", stdin);
        freopen(TASK".out", "w", stdout);
    }
    ios_base::sync_with_stdio(0);
    cin.tie(NULL); cout.tie(NULL);

    init();

    int tests = 1;
    // cin >> tests;

    while (tests --) solve();

    return 0;
}

Compilation message

feast.cpp: In function 'void primeSieve(int)':
feast.cpp:95:47: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |                             for (int j = 0; j < prime.size() && i * prime[j] <= n && prime[j] <= lpf[i]; ++ j) lpf[i * prime[j]] = prime[j];
      |                                             ~~^~~~~~~~~~~~~~
feast.cpp: In function 'void solve()':
feast.cpp:146:22: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  146 |         ll mid = lef + rig >> 1;
      |                  ~~~~^~~~~
feast.cpp: In function 'int main()':
feast.cpp:161:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  161 |         freopen(TASK".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
feast.cpp:162:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  162 |         freopen(TASK".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 292 ms 18064 KB Output is correct
2 Correct 381 ms 18456 KB Output is correct
3 Correct 350 ms 18652 KB Output is correct
4 Correct 342 ms 18560 KB Output is correct
5 Correct 397 ms 20484 KB Output is correct
6 Correct 308 ms 18220 KB Output is correct
7 Correct 378 ms 18116 KB Output is correct
8 Correct 335 ms 18464 KB Output is correct
9 Correct 370 ms 18168 KB Output is correct
10 Correct 386 ms 18536 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 330 ms 16560 KB Output is correct
2 Correct 308 ms 16884 KB Output is correct
3 Correct 362 ms 15944 KB Output is correct
4 Correct 326 ms 16724 KB Output is correct
5 Correct 405 ms 18148 KB Output is correct
6 Correct 363 ms 16476 KB Output is correct
7 Correct 287 ms 16984 KB Output is correct
8 Correct 353 ms 18716 KB Output is correct
9 Correct 297 ms 18080 KB Output is correct
10 Correct 351 ms 16948 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 398 ms 18656 KB Output is correct
2 Correct 447 ms 15760 KB Output is correct
3 Correct 381 ms 18572 KB Output is correct
4 Correct 426 ms 16216 KB Output is correct
5 Correct 389 ms 16324 KB Output is correct
6 Correct 406 ms 18768 KB Output is correct
7 Correct 399 ms 18648 KB Output is correct
8 Correct 438 ms 18556 KB Output is correct
9 Correct 399 ms 18796 KB Output is correct
10 Correct 444 ms 17920 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 460 KB Output is correct
7 Correct 1 ms 504 KB Output is correct
8 Correct 1 ms 504 KB Output is correct
9 Correct 1 ms 336 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 460 KB Output is correct
7 Correct 1 ms 504 KB Output is correct
8 Correct 1 ms 504 KB Output is correct
9 Correct 1 ms 336 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
11 Correct 1 ms 504 KB Output is correct
12 Correct 1 ms 464 KB Output is correct
13 Correct 1 ms 336 KB Output is correct
14 Correct 1 ms 336 KB Output is correct
15 Correct 1 ms 336 KB Output is correct
16 Correct 1 ms 336 KB Output is correct
17 Correct 1 ms 336 KB Output is correct
18 Correct 1 ms 336 KB Output is correct
19 Correct 1 ms 336 KB Output is correct
20 Correct 1 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 460 KB Output is correct
7 Correct 1 ms 504 KB Output is correct
8 Correct 1 ms 504 KB Output is correct
9 Correct 1 ms 336 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
11 Correct 1 ms 504 KB Output is correct
12 Correct 1 ms 464 KB Output is correct
13 Correct 1 ms 336 KB Output is correct
14 Correct 1 ms 336 KB Output is correct
15 Correct 1 ms 336 KB Output is correct
16 Correct 1 ms 336 KB Output is correct
17 Correct 1 ms 336 KB Output is correct
18 Correct 1 ms 336 KB Output is correct
19 Correct 1 ms 336 KB Output is correct
20 Correct 1 ms 336 KB Output is correct
21 Correct 2 ms 336 KB Output is correct
22 Correct 2 ms 336 KB Output is correct
23 Correct 2 ms 336 KB Output is correct
24 Correct 2 ms 476 KB Output is correct
25 Correct 2 ms 760 KB Output is correct
26 Correct 2 ms 336 KB Output is correct
27 Correct 2 ms 336 KB Output is correct
28 Correct 2 ms 592 KB Output is correct
29 Correct 2 ms 592 KB Output is correct
30 Correct 2 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 292 ms 18064 KB Output is correct
2 Correct 381 ms 18456 KB Output is correct
3 Correct 350 ms 18652 KB Output is correct
4 Correct 342 ms 18560 KB Output is correct
5 Correct 397 ms 20484 KB Output is correct
6 Correct 308 ms 18220 KB Output is correct
7 Correct 378 ms 18116 KB Output is correct
8 Correct 335 ms 18464 KB Output is correct
9 Correct 370 ms 18168 KB Output is correct
10 Correct 386 ms 18536 KB Output is correct
11 Correct 330 ms 16560 KB Output is correct
12 Correct 308 ms 16884 KB Output is correct
13 Correct 362 ms 15944 KB Output is correct
14 Correct 326 ms 16724 KB Output is correct
15 Correct 405 ms 18148 KB Output is correct
16 Correct 363 ms 16476 KB Output is correct
17 Correct 287 ms 16984 KB Output is correct
18 Correct 353 ms 18716 KB Output is correct
19 Correct 297 ms 18080 KB Output is correct
20 Correct 351 ms 16948 KB Output is correct
21 Correct 398 ms 18656 KB Output is correct
22 Correct 447 ms 15760 KB Output is correct
23 Correct 381 ms 18572 KB Output is correct
24 Correct 426 ms 16216 KB Output is correct
25 Correct 389 ms 16324 KB Output is correct
26 Correct 406 ms 18768 KB Output is correct
27 Correct 399 ms 18648 KB Output is correct
28 Correct 438 ms 18556 KB Output is correct
29 Correct 399 ms 18796 KB Output is correct
30 Correct 444 ms 17920 KB Output is correct
31 Correct 1 ms 336 KB Output is correct
32 Correct 1 ms 336 KB Output is correct
33 Correct 1 ms 336 KB Output is correct
34 Correct 1 ms 336 KB Output is correct
35 Correct 1 ms 336 KB Output is correct
36 Correct 1 ms 460 KB Output is correct
37 Correct 1 ms 504 KB Output is correct
38 Correct 1 ms 504 KB Output is correct
39 Correct 1 ms 336 KB Output is correct
40 Correct 1 ms 336 KB Output is correct
41 Correct 1 ms 504 KB Output is correct
42 Correct 1 ms 464 KB Output is correct
43 Correct 1 ms 336 KB Output is correct
44 Correct 1 ms 336 KB Output is correct
45 Correct 1 ms 336 KB Output is correct
46 Correct 1 ms 336 KB Output is correct
47 Correct 1 ms 336 KB Output is correct
48 Correct 1 ms 336 KB Output is correct
49 Correct 1 ms 336 KB Output is correct
50 Correct 1 ms 336 KB Output is correct
51 Correct 2 ms 336 KB Output is correct
52 Correct 2 ms 336 KB Output is correct
53 Correct 2 ms 336 KB Output is correct
54 Correct 2 ms 476 KB Output is correct
55 Correct 2 ms 760 KB Output is correct
56 Correct 2 ms 336 KB Output is correct
57 Correct 2 ms 336 KB Output is correct
58 Correct 2 ms 592 KB Output is correct
59 Correct 2 ms 592 KB Output is correct
60 Correct 2 ms 336 KB Output is correct
61 Correct 367 ms 18360 KB Output is correct
62 Correct 420 ms 18872 KB Output is correct
63 Correct 395 ms 18340 KB Output is correct
64 Correct 466 ms 18708 KB Output is correct
65 Correct 474 ms 18688 KB Output is correct
66 Correct 492 ms 18644 KB Output is correct
67 Correct 453 ms 18380 KB Output is correct
68 Correct 352 ms 18704 KB Output is correct
69 Correct 423 ms 18388 KB Output is correct
70 Correct 436 ms 18256 KB Output is correct