Submission #382773

# Submission time Handle Problem Language Result Execution time Memory
382773 2021-03-28T07:35:23 Z kshitij_sodani Aliens (IOI16_aliens) C++14
4 / 100
1 ms 364 KB
//#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[100001];
llo cnt[100001];
pair<llo,llo> sect(pair<llo,llo> aa,pair<llo,llo> bb){
   pair<llo,llo> cc={bb.b-aa.b,aa.a-bb.a};
   if(cc.b<0){
      cc.b=-cc.b;
      cc.a=-cc.a;
   }
   return cc;
}
llo eval(pair<llo,llo> aa,llo bb){
   return aa.a*bb+aa.b;
}
vector<pair<llo,llo>> ss;
llo kk;
pair<llo,llo> check(llo mid){
   vector<pair<llo,llo>> ee;
      llo ind=0;
      map<llo,llo> xz;
      for(llo j=0;j<ss.size();j++){
         dp[j]=(ss[j].b-ss[0].a+1);
         dp[j]*=dp[j];
         cnt[j]=1;
         /*if(i==1){
            continue;
         }*/
         if(ee.size()){
            /*while(ind+1<ee.size()){
               if(eval(ee[ind],ss[j].b)>=eval(ee[ind+1],ss[j].b)){
                  ind++;
               }
               else{
                  break;
               }
            }*/
            for(auto jj:ee){
               llo ac=eval(jj,ss[j].b)+ss[j].b*ss[j].b;
               if(ac<dp[j]){
                  dp[j]=ac;
                  cnt[j]=1+cnt[xz[ee[ind].a]];
               }
               else if(ac==dp[j]){
                  cnt[j]=min(cnt[j],1+cnt[jj.a]);
               }

            }
         /*   llo ac=eval(ee[ind],ss[j].b)+ss[j].b*ss[j].b;
            if(ac<dp[j]){
               dp[j]=ac;
               cnt[j]=1+cnt[xz[ee[ind].a]];
            }*/
         }
        /* if(mid==1023 and j==2){
            cout<<ind<<",,"<<endl;
            for(auto j:ee){
               cout<<j.a<<"::"<<j.b<<endl;
            }
         }*/
         dp[j]+=mid;
         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];
            llo mm=-2*(ss[j+1].a-1);
            pair<llo,llo> ne={mm,a2};
            while(ee.size()>=2){
               pair<llo,llo> ac=sect(ee.back(),ee[ee.size()-2]);
               pair<llo,llo> bc=sect(ee[ee.size()-2],ne);
               //bc<ac
               if(bc.a*ac.b<bc.b*ac.a){
                  ee.pop_back();
               }
               else{
                  break;
               }
            }
            ee.pb({mm,a2});
            xz[ne.a]=j;
         }
      }
    /*  cout<<mid<<"::";
      for(int i=0;i<ss.size();i++){
         cout<<dp[i]<<",";
      }
      cout<<endl;*/
      return {cnt[ss.size()-1],dp[ss.size()-1]-mid*kk};
}
long long take_photos(xx n, xx m, xx k,vector<xx> aa,vector<xx> bb) {
     ss.clear();
    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(auto j:ss){
         cout<<j.a<<"::"<<j.b<<endl;
      }*/
      k=min(k,(int)ss.size());
      kk=k;
      /*for(int i=0;i<ss.size();i++){
         for(int j=1;j<=k+1;j++){
            dp[i].pb(0);
         }
      }*/
     llo low=0;
     llo high=m*m+1;
     while(low<high-1){
         int mid=(low+high)/2;
         if(check(mid).a<=k){
            high=mid;
         }
         else{
            low=mid;
         }
     }
     llo ind=high;
     if(check(low).a<=k){
      ind=min(ind,low);
     }
     // assert(check(low).a==k);
 
     // cout<<low<<"::"<<endl;
     // cout<<check(low).a<<":"<<check(low).b<<endl;
 
      //cout<<check(low).a<<"::"<<endl;
 
      return check(ind).b;
   /* for(llo i=1;i<=k;i++){
         vector<pair<llo,llo>> ee;
         llo ind=0;
         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;
            }
            if(ee.size()){
               while(ind+1<ee.size()){
                  if(eval(ee[ind],ss[j].b)>=eval(ee[ind+1],ss[j].b)){
                     ind++;
                  }
                  else{
                     break;
                  }
               }
               dp[j][i]=min(dp[j][i],eval(ee[ind],ss[j].b)+ss[j].b*ss[j].b);
            }
            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);
               pair<llo,llo> ne={mm,a2};
               while(ee.size()>=2){
                  pair<llo,llo> ac=sect(ee.back(),ee[ee.size()-2]);
                  pair<llo,llo> bc=sect(ee[ee.size()-2],ne);
                  //bc<ac
                  if(bc.a*ac.b<bc.b*ac.a){
                     ee.pop_back();
                  }
                  else{
                     break;
                  }
               }
               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

aliens.cpp: In function 'std::pair<long long int, long long int> check(llo)':
aliens.cpp:35:20: 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]
   35 |       for(llo j=0;j<ss.size();j++){
      |                   ~^~~~~~~~~~
aliens.cpp:75:16: 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]
   75 |          if(j+1<ss.size()){
      |             ~~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Correct answer: answer = 4
2 Correct 1 ms 364 KB Correct answer: answer = 4
3 Correct 1 ms 364 KB Correct answer: answer = 4
4 Correct 1 ms 364 KB Correct answer: answer = 12
5 Correct 1 ms 364 KB Correct answer: answer = 52
6 Correct 1 ms 364 KB Correct answer: answer = 210
7 Correct 1 ms 364 KB Correct answer: answer = 88
8 Correct 1 ms 364 KB Correct answer: answer = 7696
9 Correct 1 ms 364 KB Correct answer: answer = 1
10 Correct 1 ms 364 KB Correct answer: answer = 2374
11 Correct 1 ms 364 KB Correct answer: answer = 9502
12 Correct 1 ms 364 KB Correct answer: answer = 49
13 Correct 1 ms 364 KB Correct answer: answer = 151
14 Correct 1 ms 364 KB Correct answer: answer = 7550
15 Correct 1 ms 364 KB Correct answer: answer = 7220
16 Correct 1 ms 364 KB Correct answer: answer = 7550
17 Correct 1 ms 364 KB Correct answer: answer = 10000
18 Correct 1 ms 364 KB Correct answer: answer = 10000
19 Correct 1 ms 364 KB Correct answer: answer = 624
20 Correct 1 ms 364 KB Correct answer: answer = 10000
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Correct answer: answer = 1
2 Correct 1 ms 364 KB Correct answer: answer = 4
3 Correct 1 ms 364 KB Correct answer: answer = 1
4 Incorrect 1 ms 364 KB Wrong answer: output = 3, expected = 5
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Correct answer: answer = 4
2 Correct 1 ms 364 KB Correct answer: answer = 4
3 Correct 1 ms 364 KB Correct answer: answer = 4
4 Correct 1 ms 364 KB Correct answer: answer = 12
5 Correct 1 ms 364 KB Correct answer: answer = 52
6 Correct 1 ms 364 KB Correct answer: answer = 210
7 Correct 1 ms 364 KB Correct answer: answer = 88
8 Correct 1 ms 364 KB Correct answer: answer = 7696
9 Correct 1 ms 364 KB Correct answer: answer = 1
10 Correct 1 ms 364 KB Correct answer: answer = 2374
11 Correct 1 ms 364 KB Correct answer: answer = 9502
12 Correct 1 ms 364 KB Correct answer: answer = 49
13 Correct 1 ms 364 KB Correct answer: answer = 151
14 Correct 1 ms 364 KB Correct answer: answer = 7550
15 Correct 1 ms 364 KB Correct answer: answer = 7220
16 Correct 1 ms 364 KB Correct answer: answer = 7550
17 Correct 1 ms 364 KB Correct answer: answer = 10000
18 Correct 1 ms 364 KB Correct answer: answer = 10000
19 Correct 1 ms 364 KB Correct answer: answer = 624
20 Correct 1 ms 364 KB Correct answer: answer = 10000
21 Correct 1 ms 364 KB Correct answer: answer = 1
22 Correct 1 ms 364 KB Correct answer: answer = 4
23 Correct 1 ms 364 KB Correct answer: answer = 1
24 Incorrect 1 ms 364 KB Wrong answer: output = 3, expected = 5
25 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Correct answer: answer = 4
2 Correct 1 ms 364 KB Correct answer: answer = 4
3 Correct 1 ms 364 KB Correct answer: answer = 4
4 Correct 1 ms 364 KB Correct answer: answer = 12
5 Correct 1 ms 364 KB Correct answer: answer = 52
6 Correct 1 ms 364 KB Correct answer: answer = 210
7 Correct 1 ms 364 KB Correct answer: answer = 88
8 Correct 1 ms 364 KB Correct answer: answer = 7696
9 Correct 1 ms 364 KB Correct answer: answer = 1
10 Correct 1 ms 364 KB Correct answer: answer = 2374
11 Correct 1 ms 364 KB Correct answer: answer = 9502
12 Correct 1 ms 364 KB Correct answer: answer = 49
13 Correct 1 ms 364 KB Correct answer: answer = 151
14 Correct 1 ms 364 KB Correct answer: answer = 7550
15 Correct 1 ms 364 KB Correct answer: answer = 7220
16 Correct 1 ms 364 KB Correct answer: answer = 7550
17 Correct 1 ms 364 KB Correct answer: answer = 10000
18 Correct 1 ms 364 KB Correct answer: answer = 10000
19 Correct 1 ms 364 KB Correct answer: answer = 624
20 Correct 1 ms 364 KB Correct answer: answer = 10000
21 Correct 1 ms 364 KB Correct answer: answer = 1
22 Correct 1 ms 364 KB Correct answer: answer = 4
23 Correct 1 ms 364 KB Correct answer: answer = 1
24 Incorrect 1 ms 364 KB Wrong answer: output = 3, expected = 5
25 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Correct answer: answer = 4
2 Correct 1 ms 364 KB Correct answer: answer = 4
3 Correct 1 ms 364 KB Correct answer: answer = 4
4 Correct 1 ms 364 KB Correct answer: answer = 12
5 Correct 1 ms 364 KB Correct answer: answer = 52
6 Correct 1 ms 364 KB Correct answer: answer = 210
7 Correct 1 ms 364 KB Correct answer: answer = 88
8 Correct 1 ms 364 KB Correct answer: answer = 7696
9 Correct 1 ms 364 KB Correct answer: answer = 1
10 Correct 1 ms 364 KB Correct answer: answer = 2374
11 Correct 1 ms 364 KB Correct answer: answer = 9502
12 Correct 1 ms 364 KB Correct answer: answer = 49
13 Correct 1 ms 364 KB Correct answer: answer = 151
14 Correct 1 ms 364 KB Correct answer: answer = 7550
15 Correct 1 ms 364 KB Correct answer: answer = 7220
16 Correct 1 ms 364 KB Correct answer: answer = 7550
17 Correct 1 ms 364 KB Correct answer: answer = 10000
18 Correct 1 ms 364 KB Correct answer: answer = 10000
19 Correct 1 ms 364 KB Correct answer: answer = 624
20 Correct 1 ms 364 KB Correct answer: answer = 10000
21 Correct 1 ms 364 KB Correct answer: answer = 1
22 Correct 1 ms 364 KB Correct answer: answer = 4
23 Correct 1 ms 364 KB Correct answer: answer = 1
24 Incorrect 1 ms 364 KB Wrong answer: output = 3, expected = 5
25 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Correct answer: answer = 4
2 Correct 1 ms 364 KB Correct answer: answer = 4
3 Correct 1 ms 364 KB Correct answer: answer = 4
4 Correct 1 ms 364 KB Correct answer: answer = 12
5 Correct 1 ms 364 KB Correct answer: answer = 52
6 Correct 1 ms 364 KB Correct answer: answer = 210
7 Correct 1 ms 364 KB Correct answer: answer = 88
8 Correct 1 ms 364 KB Correct answer: answer = 7696
9 Correct 1 ms 364 KB Correct answer: answer = 1
10 Correct 1 ms 364 KB Correct answer: answer = 2374
11 Correct 1 ms 364 KB Correct answer: answer = 9502
12 Correct 1 ms 364 KB Correct answer: answer = 49
13 Correct 1 ms 364 KB Correct answer: answer = 151
14 Correct 1 ms 364 KB Correct answer: answer = 7550
15 Correct 1 ms 364 KB Correct answer: answer = 7220
16 Correct 1 ms 364 KB Correct answer: answer = 7550
17 Correct 1 ms 364 KB Correct answer: answer = 10000
18 Correct 1 ms 364 KB Correct answer: answer = 10000
19 Correct 1 ms 364 KB Correct answer: answer = 624
20 Correct 1 ms 364 KB Correct answer: answer = 10000
21 Correct 1 ms 364 KB Correct answer: answer = 1
22 Correct 1 ms 364 KB Correct answer: answer = 4
23 Correct 1 ms 364 KB Correct answer: answer = 1
24 Incorrect 1 ms 364 KB Wrong answer: output = 3, expected = 5
25 Halted 0 ms 0 KB -