제출 #1104105

#제출 시각아이디문제언어결과실행 시간메모리
1104105alexander707070Aliens (IOI16_aliens)C++14
41 / 100
2097 ms4072 KiB
#include<bits/stdc++.h>

#define MAXN 100007
using namespace std;

const long long inf=1e13,inff=1e18;

long long dp[MAXN];
int cnt[MAXN];

struct interval{
	int l,r;

	inline friend bool operator < (interval fr,interval sc){
		if(fr.l==sc.l)return fr.r>sc.r;
		return fr.l<sc.l;
	}
}s[MAXN],w[MAXN];

int n,m,k,sz;

long long area(long long l,long long r){
	if(l>r)return 0;

	return (r-l+1)*(r-l+1);
}

long long cost(int l,int r){
	return area(w[l].l,w[r].r) - area(w[l].l,w[l-1].r);
}

void solve(long long delta){
	for(int i=1;i<=sz;i++){
		dp[i]=inff;

		for(int t=i;t>=1;t--){
			if(dp[t-1]+cost(t,i)+delta<dp[i]){
				dp[i]=dp[t-1]+cost(t,i)+delta;
				cnt[i]=cnt[t-1]+1;

			}else if(dp[t-1]+cost(t,i)+delta==dp[i] and cnt[t-1]+1<cnt[i]){
				cnt[i]=cnt[t-1]+1;
			}
		}
	}
}

long long bin(){
	long long l=-1,r=inf,tt;

	while(l+1<r){
		tt=(l+r)/2;

		solve(tt);

		if(cnt[sz]>k){
			l=tt;
		}else{
			r=tt;
		}
	}

	solve(r);
	if(cnt[sz]==k)return dp[sz]-cnt[sz]*r;
	
	long long val2=dp[sz]-cnt[sz]*r;
	int k2=cnt[sz];

	solve(r-1);
	long long val1=dp[sz]-cnt[sz]*(r-1);
	int k1=cnt[sz];

	return (long long) val1 + (k-k1)*(val2-val1)/(k2-k1);
}

long long take_photos(int N, int M, int K, vector<int> r, vector<int> c){
	n=N; m=M; k=K;

	for(int i=1;i<=n;i++){
		s[i]={min(r[i-1],c[i-1])+1,max(r[i-1],c[i-1])+1};
	}

	sort(s+1,s+n+1);

	for(int i=1;i<=n;i++){
		if(sz>0 and s[i].r<=w[sz].r)continue;
		sz++; w[sz]=s[i];
	}

	k=min(k,sz);

	return bin();
}

/*int main(){

	cout<<take_photos(5, 7, 2, {0, 4, 4, 4, 4}, {3, 4, 6, 5, 6})<<"\n";

	return 0;
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...