Submission #114244

#TimeUsernameProblemLanguageResultExecution timeMemory
114244faustaadpMechanical Doll (IOI18_doll)C++17
100 / 100
146 ms16268 KiB
#include "doll.h"
#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
ll n,m,te,ki[404040],ka[404040],con[404040],i,N;
vector<ll> isi;
ll cak(ll aa)
{
  ll ii;
  for(ii=0;ii<30;ii++)
  {
    if((1<<ii)>=aa)
      return (1<<ii);
  }
  return 0;
}
ll buat(ll aa,ll bb,ll cc,ll dd)
{
  if(bb==1)
  {
    isi.pb(cc);
    return -cc;
  }
  if(aa==0)
    return 1;
  else
  {
    te++;
    ll tem=te;
    ll x=min(bb/2,aa);
    ki[tem]=-buat(aa-x,bb/2,cc,dd*2);
    ka[tem]=-buat(x,bb/2,cc+dd,dd*2);
    return tem;
  }
}     
void create_circuit(int M, std::vector<int> A) 
{
  n=A.size();
  m=M;
  std::vector<int> C(M + 1);
  N=cak(n+1);
 // cout<<N<<"\n";
  C[0]=-buat(n+1,N,0,1);
  for(i=1;i<=m;i++)
    C[i]=-1;
  sort(isi.begin(),isi.end());
  for(i=n+1;i<(ll)isi.size();i++)
    A.pb(-1);
  A.pb(0);  
  for(i=0;i<(ll)isi.size();i++)
  {
    //cout<<isi[i]<<" _ "<<i<<"\n";
    con[isi[i]]=i;
  }
  for(i=1;i<=te;i++)
  {
    if(ki[i]>=0)
      ki[i]=A[con[ki[i]]];
    if(ka[i]>=0)
      ka[i]=A[con[ka[i]]];
  }
  std::vector<int> X(te);
  std::vector<int> Y(te);
  for(i=1;i<=te;i++)
  {
    //cout<<i<<" "<<ki[i]<<" "<<ka[i]<<"\n";
    X[i-1]=ki[i];
    Y[i-1]=ka[i];
  }
  answer(C, X, Y);
}
#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...