Submission #382364

#TimeUsernameProblemLanguageResultExecution timeMemory
382364kshitij_sodaniAliens (IOI16_aliens)C++14
25 / 100
2097 ms19436 KiB
//#pragma GCC optimize("Ofast,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define mp make_pair
#define pb push_back
#define a first 
#define b second
#define xx int
//#define endl '\n'



#include "aliens.h"
int mi[1000001];
llo dp[4001][4001];
long long take_photos(xx n, xx m, xx k,vector<xx> aa,vector<xx> bb) {
	vector<pair<llo,llo>> ss;
    for(llo i=0;i<m;i++){
    	mi[i]=-1;
    }
    for(llo i=0;i<n;i++){
    	mi[min(aa[i],bb[i])]=max(mi[min(aa[i],bb[i])],max(aa[i],bb[i]));
    	
   	}
   	llo cur=-1;
   	for(llo i=0;i<m;i++){
   		if(mi[i]!=-1){
   			if(mi[i]>cur){
   				ss.pb({i,mi[i]});
   				cur=mi[i];
   			}
   		}
   	}
   	for(llo i=1;i<=k;i++){
   		vector<pair<llo,llo>> ee;
   		for(llo j=0;j<ss.size();j++){
   			dp[j][i]=(ss[j].b-ss[0].a+1);
   			dp[j][i]*=dp[j][i];
   			if(i==1){
   				continue;
   			}
   			for(auto jj:ee){
   				dp[j][i]=min(dp[j][i],jj.a*ss[j].b+jj.b+ss[j].b*ss[j].b);
   			}
   			/*for(llo ii=0;ii<j;ii++){
   				llo cur=max(ss[ii].b+1-ss[ii+1].a,(llo)0);
   				cur*=cur;
   				
   				dp[j][i]=min(dp[j][i],dp[ii][i-1]+(ss[j].b-ss[ii+1].a+1)*(ss[j].b-ss[ii+1].a+1)-cur);
   			}*/
   			if(j+1<ss.size()){
   				llo a2=max(ss[j].b+1-ss[j+1].a,(llo)0);
   				a2*=a2;
   				a2=-a2;
   				a2+=(ss[j+1].a-1)*(ss[j+1].a-1);
   				a2+=dp[j][i-1];
   				llo mm=-2*(ss[j+1].a-1);
   				ee.pb({mm,a2});
   			}
   		}
   	}
  /* 	for(llo i=1;i<=k;i++){
   		for(llo j=0;j<ss.size();j++){
   			cout<<dp[j][i]<<",";
   		}
   		cout<<endl;
   	}*/
   	/*cout<<dp[0][1]<<"::"<<dp[1][1]<<endl;
   	for(auto j:ss){
   		cout<<j.a<<":"<<j.b<<endl;
   	}
   	cout<<endl;
*/
















    return dp[ss.size()-1][k];
}

Compilation message (stderr)

aliens.cpp: In function 'long long int take_photos(int, int, int, std::vector<int>, std::vector<int>)':
aliens.cpp:37:19: warning: comparison of integer expressions of different signedness: 'llo' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |      for(llo j=0;j<ss.size();j++){
      |                  ~^~~~~~~~~~
aliens.cpp:52:13: warning: comparison of integer expressions of different signedness: 'llo' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |       if(j+1<ss.size()){
      |          ~~~^~~~~~~~~~
#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...