답안 #761015

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
761015 2023-06-19T04:02:01 Z AryanReddy Aliens (IOI16_aliens) C++14
4 / 100
1 ms 340 KB
#undef local
#include <bits/stdc++.h>
#define all(v) v.begin(),v.end()
#define allr(v) v.rbegin(),v.rend()
#define fori(i,n) for(int i=0;i<n;i++)
#define ford(i,n) for(int i = n-1;i >= 0;i--)
#define pb push_back
#define ll long long int
//#define mod 998244353
#define pi pair<int,int>
#define pll pair<ll,ll>
#define mp make_pair
#define fi first
#define se second
#define printVector(v) fori(;,v.size()) {cout << v[i] << " ";} cout << "\n";
std::mt19937 rng((unsigned int) std::chrono::steady_clock::now().time_since_epoch().count());
using namespace std;
struct LineContainer{
    vector<pll> lines;
    vector<int> ind;
    int ptr = 0;
    bool check(pll a1,pll a2,pll a3){
        assert(a1.fi <= a2.fi && a2.fi <= a3.fi);
        __int128_t c1 = a2.se - a1.se;
        c1 *= (a2.fi - a3.fi);
        __int128_t c2 = a3.se - a2.se;
        c2 *= a1.fi - a2.fi;
        return c1 >= c2;
    }
    void add(ll k,ll m,int i){
        pll nw = {-k,-m};
        int sz;
        while(((sz = lines.size()) > 1) && check(lines[sz-2],lines[sz-1],nw)){
            lines.pop_back();
            ind.pop_back();
            ptr = min(ptr,(int)lines.size() - 1);
        }
        lines.push_back(nw);
        ind.pb(i);
    }
    pll get(ll x){
        while(ptr < (int)lines.size()-1){
            pll a1 = lines[ptr];
            pll a2 = lines[ptr+1];
            __int128_t tmp = x;
            if((a2.se - a1.se) >= tmp * (a1.fi - a2.fi)) ptr++;
            else break;
        }
        auto p = lines[ptr];
        ll res = -(p.fi * x + p.se);
        return mp(res,ind[ptr]);
    }
};
pll getAns(vector<pll> a,ll lambda){
    int n = a.size();
    sort(all(a),[&](pll x,pll y){
        return mp(x.fi,-x.se) < mp(y.fi,-y.se);
    });
    int ptr = a[0].se;
    vector<pll> b = {a[0]};
    for(int i= 1;i < n;i++){
        if(a[i].se <= ptr){
            continue;
        }
        b.push_back(a[i]);
        ptr = a[i].se;
    }
    a = b;
    n = a.size();
    vector<ll> dp(n+1,1e18);
    vector<int> ks(n+1,0);
    LineContainer L;
    {
    dp[0] = 0;
    ll lt1 = a[0].fi;
    ll c =  - 2 * lt1 + lt1 * lt1;
    ll a = -2 * lt1;
    L.add(a,c,0);
}
    for(int i = 1;i <= n;i++){
            ll ri=a[i-1].se;
            auto p = L.get(ri);
            dp[i] = p.fi + ri * ri + 2*ri + 1 -lambda;
            ks[i] = ks[p.se] + 1;
            if(i < n){
                ll lt1 = a[i].fi;
                ll c = dp[i] - 2 * lt1 + lt1 * lt1;
                ll rt = a[i-1].se;
                ll tmp = max(0ll,rt - lt1 + 1);
                c -= tmp * tmp;
                ll a = -2 * lt1;
                L.add(a,c,i);
            }

    }
    return mp(dp[n] + ks[n] * lambda,ks[n]);
}

long long take_photos(int n, int m, int k, vector<int> rr, vector<int> cc){
    vector<pll> a;
    for(int i = 0;i < n;i++){
        int x = rr[i];
        int y = cc[i];
        a.pb(mp(min(x,y),max(x,y)));
    }
    sort(all(a));
    a.erase(unique(all(a)),a.end());
    ll l = -1e12-1,r = 1e12+1;
    ll sv = getAns(a,l).fi;
    while(l + 1 < r){
        ll m= (l + r)/2;
        auto p = getAns(a,m);
        if(p.se <= k){
            l = m;
            sv = p.fi;
        }else{
            r = m;
        }
    }
    return sv;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Correct answer: answer = 4
2 Correct 1 ms 304 KB Correct answer: answer = 4
3 Correct 1 ms 212 KB Correct answer: answer = 4
4 Correct 1 ms 212 KB Correct answer: answer = 12
5 Correct 1 ms 304 KB Correct answer: answer = 52
6 Correct 1 ms 212 KB Correct answer: answer = 210
7 Correct 1 ms 212 KB Correct answer: answer = 88
8 Correct 1 ms 304 KB Correct answer: answer = 7696
9 Correct 1 ms 212 KB Correct answer: answer = 1
10 Correct 1 ms 300 KB Correct answer: answer = 2374
11 Correct 1 ms 212 KB Correct answer: answer = 9502
12 Correct 0 ms 212 KB Correct answer: answer = 49
13 Correct 1 ms 212 KB Correct answer: answer = 151
14 Correct 1 ms 212 KB Correct answer: answer = 7550
15 Correct 1 ms 304 KB Correct answer: answer = 7220
16 Correct 1 ms 308 KB Correct answer: answer = 7550
17 Correct 1 ms 212 KB Correct answer: answer = 10000
18 Correct 1 ms 212 KB Correct answer: answer = 10000
19 Correct 1 ms 212 KB Correct answer: answer = 624
20 Correct 1 ms 300 KB Correct answer: answer = 10000
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Correct answer: answer = 1
2 Correct 1 ms 308 KB Correct answer: answer = 4
3 Correct 1 ms 300 KB Correct answer: answer = 1
4 Correct 1 ms 300 KB Correct answer: answer = 5
5 Correct 1 ms 212 KB Correct answer: answer = 41
6 Correct 1 ms 280 KB Correct answer: answer = 71923
7 Correct 1 ms 212 KB Correct answer: answer = 77137
8 Incorrect 1 ms 340 KB Wrong answer: output = 925, expected = 764
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Correct answer: answer = 4
2 Correct 1 ms 304 KB Correct answer: answer = 4
3 Correct 1 ms 212 KB Correct answer: answer = 4
4 Correct 1 ms 212 KB Correct answer: answer = 12
5 Correct 1 ms 304 KB Correct answer: answer = 52
6 Correct 1 ms 212 KB Correct answer: answer = 210
7 Correct 1 ms 212 KB Correct answer: answer = 88
8 Correct 1 ms 304 KB Correct answer: answer = 7696
9 Correct 1 ms 212 KB Correct answer: answer = 1
10 Correct 1 ms 300 KB Correct answer: answer = 2374
11 Correct 1 ms 212 KB Correct answer: answer = 9502
12 Correct 0 ms 212 KB Correct answer: answer = 49
13 Correct 1 ms 212 KB Correct answer: answer = 151
14 Correct 1 ms 212 KB Correct answer: answer = 7550
15 Correct 1 ms 304 KB Correct answer: answer = 7220
16 Correct 1 ms 308 KB Correct answer: answer = 7550
17 Correct 1 ms 212 KB Correct answer: answer = 10000
18 Correct 1 ms 212 KB Correct answer: answer = 10000
19 Correct 1 ms 212 KB Correct answer: answer = 624
20 Correct 1 ms 300 KB Correct answer: answer = 10000
21 Correct 1 ms 212 KB Correct answer: answer = 1
22 Correct 1 ms 308 KB Correct answer: answer = 4
23 Correct 1 ms 300 KB Correct answer: answer = 1
24 Correct 1 ms 300 KB Correct answer: answer = 5
25 Correct 1 ms 212 KB Correct answer: answer = 41
26 Correct 1 ms 280 KB Correct answer: answer = 71923
27 Correct 1 ms 212 KB Correct answer: answer = 77137
28 Incorrect 1 ms 340 KB Wrong answer: output = 925, expected = 764
29 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Correct answer: answer = 4
2 Correct 1 ms 304 KB Correct answer: answer = 4
3 Correct 1 ms 212 KB Correct answer: answer = 4
4 Correct 1 ms 212 KB Correct answer: answer = 12
5 Correct 1 ms 304 KB Correct answer: answer = 52
6 Correct 1 ms 212 KB Correct answer: answer = 210
7 Correct 1 ms 212 KB Correct answer: answer = 88
8 Correct 1 ms 304 KB Correct answer: answer = 7696
9 Correct 1 ms 212 KB Correct answer: answer = 1
10 Correct 1 ms 300 KB Correct answer: answer = 2374
11 Correct 1 ms 212 KB Correct answer: answer = 9502
12 Correct 0 ms 212 KB Correct answer: answer = 49
13 Correct 1 ms 212 KB Correct answer: answer = 151
14 Correct 1 ms 212 KB Correct answer: answer = 7550
15 Correct 1 ms 304 KB Correct answer: answer = 7220
16 Correct 1 ms 308 KB Correct answer: answer = 7550
17 Correct 1 ms 212 KB Correct answer: answer = 10000
18 Correct 1 ms 212 KB Correct answer: answer = 10000
19 Correct 1 ms 212 KB Correct answer: answer = 624
20 Correct 1 ms 300 KB Correct answer: answer = 10000
21 Correct 1 ms 212 KB Correct answer: answer = 1
22 Correct 1 ms 308 KB Correct answer: answer = 4
23 Correct 1 ms 300 KB Correct answer: answer = 1
24 Correct 1 ms 300 KB Correct answer: answer = 5
25 Correct 1 ms 212 KB Correct answer: answer = 41
26 Correct 1 ms 280 KB Correct answer: answer = 71923
27 Correct 1 ms 212 KB Correct answer: answer = 77137
28 Incorrect 1 ms 340 KB Wrong answer: output = 925, expected = 764
29 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Correct answer: answer = 4
2 Correct 1 ms 304 KB Correct answer: answer = 4
3 Correct 1 ms 212 KB Correct answer: answer = 4
4 Correct 1 ms 212 KB Correct answer: answer = 12
5 Correct 1 ms 304 KB Correct answer: answer = 52
6 Correct 1 ms 212 KB Correct answer: answer = 210
7 Correct 1 ms 212 KB Correct answer: answer = 88
8 Correct 1 ms 304 KB Correct answer: answer = 7696
9 Correct 1 ms 212 KB Correct answer: answer = 1
10 Correct 1 ms 300 KB Correct answer: answer = 2374
11 Correct 1 ms 212 KB Correct answer: answer = 9502
12 Correct 0 ms 212 KB Correct answer: answer = 49
13 Correct 1 ms 212 KB Correct answer: answer = 151
14 Correct 1 ms 212 KB Correct answer: answer = 7550
15 Correct 1 ms 304 KB Correct answer: answer = 7220
16 Correct 1 ms 308 KB Correct answer: answer = 7550
17 Correct 1 ms 212 KB Correct answer: answer = 10000
18 Correct 1 ms 212 KB Correct answer: answer = 10000
19 Correct 1 ms 212 KB Correct answer: answer = 624
20 Correct 1 ms 300 KB Correct answer: answer = 10000
21 Correct 1 ms 212 KB Correct answer: answer = 1
22 Correct 1 ms 308 KB Correct answer: answer = 4
23 Correct 1 ms 300 KB Correct answer: answer = 1
24 Correct 1 ms 300 KB Correct answer: answer = 5
25 Correct 1 ms 212 KB Correct answer: answer = 41
26 Correct 1 ms 280 KB Correct answer: answer = 71923
27 Correct 1 ms 212 KB Correct answer: answer = 77137
28 Incorrect 1 ms 340 KB Wrong answer: output = 925, expected = 764
29 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Correct answer: answer = 4
2 Correct 1 ms 304 KB Correct answer: answer = 4
3 Correct 1 ms 212 KB Correct answer: answer = 4
4 Correct 1 ms 212 KB Correct answer: answer = 12
5 Correct 1 ms 304 KB Correct answer: answer = 52
6 Correct 1 ms 212 KB Correct answer: answer = 210
7 Correct 1 ms 212 KB Correct answer: answer = 88
8 Correct 1 ms 304 KB Correct answer: answer = 7696
9 Correct 1 ms 212 KB Correct answer: answer = 1
10 Correct 1 ms 300 KB Correct answer: answer = 2374
11 Correct 1 ms 212 KB Correct answer: answer = 9502
12 Correct 0 ms 212 KB Correct answer: answer = 49
13 Correct 1 ms 212 KB Correct answer: answer = 151
14 Correct 1 ms 212 KB Correct answer: answer = 7550
15 Correct 1 ms 304 KB Correct answer: answer = 7220
16 Correct 1 ms 308 KB Correct answer: answer = 7550
17 Correct 1 ms 212 KB Correct answer: answer = 10000
18 Correct 1 ms 212 KB Correct answer: answer = 10000
19 Correct 1 ms 212 KB Correct answer: answer = 624
20 Correct 1 ms 300 KB Correct answer: answer = 10000
21 Correct 1 ms 212 KB Correct answer: answer = 1
22 Correct 1 ms 308 KB Correct answer: answer = 4
23 Correct 1 ms 300 KB Correct answer: answer = 1
24 Correct 1 ms 300 KB Correct answer: answer = 5
25 Correct 1 ms 212 KB Correct answer: answer = 41
26 Correct 1 ms 280 KB Correct answer: answer = 71923
27 Correct 1 ms 212 KB Correct answer: answer = 77137
28 Incorrect 1 ms 340 KB Wrong answer: output = 925, expected = 764
29 Halted 0 ms 0 KB -