Submission #1356506

#TimeUsernameProblemLanguageResultExecution timeMemory
1356506settopMechanical Doll (IOI18_doll)C++20
10 / 100
0 ms344 KiB
#include "doll.h"
#include<bits/stdc++.h>

using namespace std;
#define ll long long
#define fall(i,a,b) for(int i=a;i<=b;i++)
#define rfall(i,a,b) for(int i=a;i>=b;i--)
#define sz(x) (int) x.size()
#define pb push_back
#define all(x) x.begin(),x.end()
const int MAXN=5e5+10;
const ll inf=1e17;
typedef pair<int,int> pii;

int n,X[MAXN],Y[MAXN],vis[MAXN],cur=1;
vector<int> resp;

void add(int ind,int tam,int val){
  vis[ind]++;
  if(tam==2){
    if(vis[ind]==1) X[ind]=val;
    else Y[ind]=val;
    return;
  }
  if(vis[ind]==1){
    cur++;
    X[ind]=-cur;
    cur++;
    Y[ind]=-cur;
  }
  if(vis[ind]%2==1) add(-X[ind],tam/2,val);
  else add(-Y[ind],tam/2,val);
}

void create_circuit(int M, std::vector<int> A){
  n=sz(A);
  resp.resize(M+1,-1);
  fall(i,0,n-1) add(1,n,A[i]);
  cur++;
  fall(i,1,M) resp[i]=-cur;
  X[cur]=-1,Y[cur]=-(cur+1);
  cur++;
  X[cur]=-1,Y[cur]=-(cur+1);
  cur++;
  X[cur]=-1,Y[cur]=-(cur+1);
  cur++;
  X[cur]=-1,Y[cur]=0;
  fall(i,1,cur) vis[i]=0;
  vector<int> x(cur),y(cur);
  fall(i,0,cur-1) x[i]=X[i+1],y[i]=Y[i+1];
  answer(resp,x,y);
}
#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...