제출 #424133

#제출 시각아이디문제언어결과실행 시간메모리
424133A_DMechanical Doll (IOI18_doll)C++14
37 / 100
116 ms12128 KiB
#include "doll.h"
#include <bits/stdc++.h>
#define ii pair<int,int>
#define F first
#define S second
using namespace std;
const int NN=3e5+100;
vector<int> c,x,y,a;
int sz;
void build(int p,int l,int sum)
{
    if(sum*2>=sz){
        x[p-1]=a[l];
        y[p-1]=a[l+sum];
        return;
    }
    x[p-1]=(-(p*2));
    y[p-1]=(-(p*2+1));
    build(p*2,l,sum*2);
    build(p*2+1,l+sum,sum*2);
}
void create_circuit(int m,vector<int>A){
    a=A;
    sz=a.size();
    if(a.size()==1){
        c.resize(m+1);
        c[0]=a[0];
        answer(c,x,y);
        return;
    }
    for(int i=0;i<=m;i++){
        c.push_back(-1);
    }
    sz++;
    a.push_back(-1);
    while(1){
        int u=log2(sz);
        int v=log2(sz-1);
        if(u>v){
            break;
        }
        sz++;
        a.push_back(-1);
    }
    a.pop_back();
    a.push_back(0);
    x.resize(sz*2);
    y.resize(sz*2);
    build(1,0,1);
    while(x.back()==y.back()&&x.back()==0){
        x.pop_back();
        y.pop_back();
    }
/*
    cout<<sz<<endl;
    for(auto x:c)cout<<x<<" ";cout<<endl;
    for(auto xx:x)cout<<xx<<" ";cout<<endl;
    for(auto x:y)cout<<x<<" ";cout<<endl;
*/
    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...