Submission #967983

# Submission time Handle Problem Language Result Execution time Memory
967983 2024-04-23T06:28:00 Z GrindMachine Aliens (IOI16_aliens) C++17
4 / 100
4 ms 428 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

template<typename T> using Tree = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
typedef long long int ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL)
#define pb push_back
#define endl '\n'
#define sz(a) (int)a.size()
#define setbits(x) __builtin_popcountll(x)
#define ff first
#define ss second
#define conts continue
#define ceil2(x,y) ((x+y-1)/(y))
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define yes cout << "Yes" << endl
#define no cout << "No" << endl

#define rep(i,n) for(int i = 0; i < n; ++i)
#define rep1(i,n) for(int i = 1; i <= n; ++i)
#define rev(i,s,e) for(int i = s; i >= e; --i)
#define trav(i,a) for(auto &i : a)

template<typename T>
void amin(T &a, T b) {
    a = min(a,b);
}

template<typename T>
void amax(T &a, T b) {
    a = max(a,b);
}

#ifdef LOCAL
#include "debug.h"
#else
#define debug(x) 42
#endif

/*



*/

const int MOD = 1e9 + 7;
const int N = 1e5 + 5;
const int inf1 = int(1e9) + 5;
const ll inf2 = ll(1e18) + 5;

#include "aliens.h"

struct Line{
    ld m,c;
    ll id;

    ld f(ll x){
        return m*x+c;
    }

    ll intersect(Line l){
        return ceil((ld)(l.c-c)/(m-l.m));
    }
};

struct CHT{
    deque<pair<Line,ll>> dq;
    
    void insert(Line l1){
        while(!dq.empty()){
            auto [l2,p] = dq.back();
            if(l1.f(p) <= l2.f(p)){
                dq.pop_back();
            }
            else{
                break;
            }
        }

        if(dq.empty()){
            dq.pb({l1,0});
        }
        else{
            ll p = l1.intersect(dq.back().ff);
            dq.pb({l1,p});
        }
    }

    pair<ld,ll> query(ll x){
        while(sz(dq) > 1){
            if(dq[1].ff.f(x) <= dq[0].ff.f(x)){
                dq.pop_front();
            }
            else{
                break;
            }
        }

        return {dq[0].ff.f(x),dq[0].ff.id};
    }
};

long long take_photos(int n, int m, int k, std::vector<int> R, std::vector<int> C) {
    vector<pll> a;
    rep(i,n) a.pb({min(R[i],C[i]),max(R[i],C[i])});

    auto cmp = [&](pll p1, pll p2){
        if(p1.ff != p2.ff) return p1.ff < p2.ff;
        return p1.ss > p2.ss;
    };

    sort(all(a),cmp);
    vector<pll> b;
    ll mx = -1;

    rep(i,n){
        if(a[i].ss > mx){
            mx = a[i].ss;
            b.pb(a[i]);
        }
    }

    a = b;
    n = sz(a);
    amin(k,n);
    a.insert(a.begin(),{-1,-1});

    auto sq = [&](ll x){
        return x*x;
    };

    auto get = [&](ll lambda) -> pair<ld,ll> {
        vector<ld> dp(n+5,inf2);
        vector<ll> cnt(n+5);
        dp[0] = 0;
        CHT cht;

        rep1(i,n){
            auto [l,r] = a[i];
            ll intersection = max(a[i-1].ss-l+1,0ll);
            cht.insert({-2*(l-1),sq(l-1)+dp[i-1]-sq(intersection),i});
            auto [val,ind] = cht.query(r);
            dp[i] = r*r+val+lambda;
            cnt[i] = cnt[ind-1]+1;
        }

        return {dp[n],cnt[n]};
    };

    ld lo = 0, hi = 1e12+5;
    ld lambda = -1;

    rep(iter,200){
        ld mid = (lo+hi)/2;
        auto [cost,cnt] = get(mid);
        if(cnt <= k){
            lambda = mid;
            hi = mid;
        }
        else{
            lo = mid;
        }
    }

    auto [cost,cnt] = get(lambda);
    ll ans = cost-cnt*lambda;
    return ans;
}

Compilation message

aliens.cpp: In lambda function:
aliens.cpp:150:27: warning: narrowing conversion of '(-2 * (l - 1))' from 'std::tuple_element<0, std::pair<long long int, long long int> >::type' {aka 'long long int'} to 'ld' {aka 'long double'} [-Wnarrowing]
  150 |             cht.insert({-2*(l-1),sq(l-1)+dp[i-1]-sq(intersection),i});
      |                         ~~^~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Correct answer: answer = 4
2 Correct 0 ms 348 KB Correct answer: answer = 4
3 Correct 0 ms 348 KB Correct answer: answer = 4
4 Correct 0 ms 344 KB Correct answer: answer = 12
5 Correct 0 ms 348 KB Correct answer: answer = 52
6 Correct 0 ms 348 KB Correct answer: answer = 210
7 Correct 0 ms 348 KB Correct answer: answer = 88
8 Correct 1 ms 344 KB Correct answer: answer = 7696
9 Correct 0 ms 348 KB Correct answer: answer = 1
10 Correct 1 ms 344 KB Correct answer: answer = 2374
11 Correct 1 ms 348 KB Correct answer: answer = 9502
12 Correct 1 ms 348 KB Correct answer: answer = 49
13 Correct 1 ms 348 KB Correct answer: answer = 151
14 Correct 2 ms 348 KB Correct answer: answer = 7550
15 Correct 1 ms 348 KB Correct answer: answer = 7220
16 Correct 1 ms 348 KB Correct answer: answer = 7550
17 Correct 0 ms 348 KB Correct answer: answer = 10000
18 Correct 1 ms 428 KB Correct answer: answer = 10000
19 Correct 1 ms 344 KB Correct answer: answer = 624
20 Correct 0 ms 344 KB Correct answer: answer = 10000
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Correct answer: answer = 1
2 Correct 0 ms 348 KB Correct answer: answer = 4
3 Correct 1 ms 348 KB Correct answer: answer = 1
4 Correct 0 ms 348 KB Correct answer: answer = 5
5 Correct 0 ms 348 KB Correct answer: answer = 41
6 Correct 1 ms 348 KB Correct answer: answer = 71923
7 Correct 2 ms 348 KB Correct answer: answer = 77137
8 Incorrect 4 ms 348 KB Wrong answer: output = 925, expected = 764
9 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Correct answer: answer = 4
2 Correct 0 ms 348 KB Correct answer: answer = 4
3 Correct 0 ms 348 KB Correct answer: answer = 4
4 Correct 0 ms 344 KB Correct answer: answer = 12
5 Correct 0 ms 348 KB Correct answer: answer = 52
6 Correct 0 ms 348 KB Correct answer: answer = 210
7 Correct 0 ms 348 KB Correct answer: answer = 88
8 Correct 1 ms 344 KB Correct answer: answer = 7696
9 Correct 0 ms 348 KB Correct answer: answer = 1
10 Correct 1 ms 344 KB Correct answer: answer = 2374
11 Correct 1 ms 348 KB Correct answer: answer = 9502
12 Correct 1 ms 348 KB Correct answer: answer = 49
13 Correct 1 ms 348 KB Correct answer: answer = 151
14 Correct 2 ms 348 KB Correct answer: answer = 7550
15 Correct 1 ms 348 KB Correct answer: answer = 7220
16 Correct 1 ms 348 KB Correct answer: answer = 7550
17 Correct 0 ms 348 KB Correct answer: answer = 10000
18 Correct 1 ms 428 KB Correct answer: answer = 10000
19 Correct 1 ms 344 KB Correct answer: answer = 624
20 Correct 0 ms 344 KB Correct answer: answer = 10000
21 Correct 0 ms 348 KB Correct answer: answer = 1
22 Correct 0 ms 348 KB Correct answer: answer = 4
23 Correct 1 ms 348 KB Correct answer: answer = 1
24 Correct 0 ms 348 KB Correct answer: answer = 5
25 Correct 0 ms 348 KB Correct answer: answer = 41
26 Correct 1 ms 348 KB Correct answer: answer = 71923
27 Correct 2 ms 348 KB Correct answer: answer = 77137
28 Incorrect 4 ms 348 KB Wrong answer: output = 925, expected = 764
29 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Correct answer: answer = 4
2 Correct 0 ms 348 KB Correct answer: answer = 4
3 Correct 0 ms 348 KB Correct answer: answer = 4
4 Correct 0 ms 344 KB Correct answer: answer = 12
5 Correct 0 ms 348 KB Correct answer: answer = 52
6 Correct 0 ms 348 KB Correct answer: answer = 210
7 Correct 0 ms 348 KB Correct answer: answer = 88
8 Correct 1 ms 344 KB Correct answer: answer = 7696
9 Correct 0 ms 348 KB Correct answer: answer = 1
10 Correct 1 ms 344 KB Correct answer: answer = 2374
11 Correct 1 ms 348 KB Correct answer: answer = 9502
12 Correct 1 ms 348 KB Correct answer: answer = 49
13 Correct 1 ms 348 KB Correct answer: answer = 151
14 Correct 2 ms 348 KB Correct answer: answer = 7550
15 Correct 1 ms 348 KB Correct answer: answer = 7220
16 Correct 1 ms 348 KB Correct answer: answer = 7550
17 Correct 0 ms 348 KB Correct answer: answer = 10000
18 Correct 1 ms 428 KB Correct answer: answer = 10000
19 Correct 1 ms 344 KB Correct answer: answer = 624
20 Correct 0 ms 344 KB Correct answer: answer = 10000
21 Correct 0 ms 348 KB Correct answer: answer = 1
22 Correct 0 ms 348 KB Correct answer: answer = 4
23 Correct 1 ms 348 KB Correct answer: answer = 1
24 Correct 0 ms 348 KB Correct answer: answer = 5
25 Correct 0 ms 348 KB Correct answer: answer = 41
26 Correct 1 ms 348 KB Correct answer: answer = 71923
27 Correct 2 ms 348 KB Correct answer: answer = 77137
28 Incorrect 4 ms 348 KB Wrong answer: output = 925, expected = 764
29 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Correct answer: answer = 4
2 Correct 0 ms 348 KB Correct answer: answer = 4
3 Correct 0 ms 348 KB Correct answer: answer = 4
4 Correct 0 ms 344 KB Correct answer: answer = 12
5 Correct 0 ms 348 KB Correct answer: answer = 52
6 Correct 0 ms 348 KB Correct answer: answer = 210
7 Correct 0 ms 348 KB Correct answer: answer = 88
8 Correct 1 ms 344 KB Correct answer: answer = 7696
9 Correct 0 ms 348 KB Correct answer: answer = 1
10 Correct 1 ms 344 KB Correct answer: answer = 2374
11 Correct 1 ms 348 KB Correct answer: answer = 9502
12 Correct 1 ms 348 KB Correct answer: answer = 49
13 Correct 1 ms 348 KB Correct answer: answer = 151
14 Correct 2 ms 348 KB Correct answer: answer = 7550
15 Correct 1 ms 348 KB Correct answer: answer = 7220
16 Correct 1 ms 348 KB Correct answer: answer = 7550
17 Correct 0 ms 348 KB Correct answer: answer = 10000
18 Correct 1 ms 428 KB Correct answer: answer = 10000
19 Correct 1 ms 344 KB Correct answer: answer = 624
20 Correct 0 ms 344 KB Correct answer: answer = 10000
21 Correct 0 ms 348 KB Correct answer: answer = 1
22 Correct 0 ms 348 KB Correct answer: answer = 4
23 Correct 1 ms 348 KB Correct answer: answer = 1
24 Correct 0 ms 348 KB Correct answer: answer = 5
25 Correct 0 ms 348 KB Correct answer: answer = 41
26 Correct 1 ms 348 KB Correct answer: answer = 71923
27 Correct 2 ms 348 KB Correct answer: answer = 77137
28 Incorrect 4 ms 348 KB Wrong answer: output = 925, expected = 764
29 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Correct answer: answer = 4
2 Correct 0 ms 348 KB Correct answer: answer = 4
3 Correct 0 ms 348 KB Correct answer: answer = 4
4 Correct 0 ms 344 KB Correct answer: answer = 12
5 Correct 0 ms 348 KB Correct answer: answer = 52
6 Correct 0 ms 348 KB Correct answer: answer = 210
7 Correct 0 ms 348 KB Correct answer: answer = 88
8 Correct 1 ms 344 KB Correct answer: answer = 7696
9 Correct 0 ms 348 KB Correct answer: answer = 1
10 Correct 1 ms 344 KB Correct answer: answer = 2374
11 Correct 1 ms 348 KB Correct answer: answer = 9502
12 Correct 1 ms 348 KB Correct answer: answer = 49
13 Correct 1 ms 348 KB Correct answer: answer = 151
14 Correct 2 ms 348 KB Correct answer: answer = 7550
15 Correct 1 ms 348 KB Correct answer: answer = 7220
16 Correct 1 ms 348 KB Correct answer: answer = 7550
17 Correct 0 ms 348 KB Correct answer: answer = 10000
18 Correct 1 ms 428 KB Correct answer: answer = 10000
19 Correct 1 ms 344 KB Correct answer: answer = 624
20 Correct 0 ms 344 KB Correct answer: answer = 10000
21 Correct 0 ms 348 KB Correct answer: answer = 1
22 Correct 0 ms 348 KB Correct answer: answer = 4
23 Correct 1 ms 348 KB Correct answer: answer = 1
24 Correct 0 ms 348 KB Correct answer: answer = 5
25 Correct 0 ms 348 KB Correct answer: answer = 41
26 Correct 1 ms 348 KB Correct answer: answer = 71923
27 Correct 2 ms 348 KB Correct answer: answer = 77137
28 Incorrect 4 ms 348 KB Wrong answer: output = 925, expected = 764
29 Halted 0 ms 0 KB -