This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "doll.h"
#include<iostream>
#include<vector>
using namespace std;
int reverse(int a,int exp){
int ans=0;
while(exp--){ans*=2;
ans+=a%2;
a/=2;
}//cout<<endl;
return ans;
}
void create_circuit(int M, std::vector<int> A) {vector<int> C(M+1);
A.push_back(0);
for(int i=0;i<=M;i++)C[i]=-1;
C[0]=A[0];
A.erase(A.begin());
int N = A.size();
int pow=1;
int exp=0;
while(pow<N){
pow*=2;
exp++;
}
vector<int> X(pow-1);
vector<int> Y(pow-1);
for(int i=0;i<pow/2-1;i++){
X[i]=2*(-i-1);
Y[i]=2*(-i-1)-1;
//cout<<-i-1<<" "<<X[i]<<" "<<Y[i]<<endl;
}
for(int i=pow/2;i<pow;i++){
int orderX=2*i-pow;
int orderY=2*i+1-pow;
//cout<<orderX<<" "<<orderY<<endl;
//cout<<reverse(orderX,exp)<<endl;
//cout<<reverse(orderY,exp)<<endl;
int rX=reverse(orderX,exp);
int rY=reverse(orderY,exp);
//cout<<rX<<" "<<rY<<endl;
if(rX+N>=pow){
X[i-1]=A[rX-pow+N];
}else X[i-1]=-1;
if(rY+N>=pow){
Y[i-1]=A[rY-pow+N];
}else Y[i-1]=-1;
}
//cout<<pow<<endl;
answer(C,X,Y);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |