Submission #1356204

#TimeUsernameProblemLanguageResultExecution timeMemory
1356204AvianshAliens (IOI16_aliens)C++20
0 / 100
0 ms344 KiB
#include <bits/stdc++.h>

#include "aliens.h"

using namespace std;

const long long inf = 2e18;

///first try without coord compress
array<long long,2> check(vector<int>&mns, long long lam){
    int las = -1;
    int lasct = 0;
    int curr = 0;
    array<long long,2>ans = {0,0};
    ///stores: {cost,k} to be minimized
    for(int i = 0;i<mns.size();i++){
        curr--;
        if(curr<mns[i]){
            curr=max(0,curr);
            ///either make new or take from las
            array<long long,2>temp1 = {inf,inf};
            if(las!=-1){
                ///take from las option to be considered
                int dx = mns[i]-curr;
                temp1[0]=ans[0]+2*dx*(i-las+1);
                temp1[1]=lasct;
            }
            array<long long,2>temp2 = {ans[0]+mns[i]+mns[i]+1+lam,ans[1]+1};
            ans=min(temp1,temp2);
            curr=mns[i];
            if(ans==temp2){
                las=i;
                lasct=ans[1];
            }
        }
        else{
            ans[0]+=max(0,curr+curr+1);
        }
    }
    return ans;
}

long long take_photos(int n, int m, int k, vector<int> r, vector<int> c) {
    vector<int>mns(m,-1e9);
    for(int i = 0;i<n;i++){
        int dist = max(r[i]-c[i],c[i]-r[i]);
        mns[min(r[i],c[i])]=max(mns[min(r[i],c[i])],dist);
    }
    long long lo = 0;
    long long hi = inf/2;
    while(lo<hi){
        long long mid = (lo+hi)/2;
        array<long long,2> curr = check(mns,mid);
        if(curr[1]>k){
            lo=mid+1;
        }
        else{
            hi=mid;
        }
    }
    array<long long,2>curr = check(mns,lo);
    long long ans = curr[0]-k*lo;
    return ans;
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...