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 <bits/stdc++.h>
using namespace std;
void create_circuit(int m, std::vector<int> a) {
a.push_back(0);
int n=a.size();
vector<int> c(m+1);
for(int i=0;i<=m;i++){
c[i]=-1;
}
int nowi=2,s=1,bt=0;
while(nowi<n){
nowi*=2;
s*=2;
s++;
bt++;
}
vector<int> x(s+1,-1),y(s+1,-1);
int now=0;
x[0]=0;
y[0]=0;
for(int i=1;i<=s;i++){
if(i*2<=s){
x[i]=-i*2;
y[i]=-i*2-1;
}
}
vector<pair<int,int>> pq;
for(int i=0;i<(s+1)/2;i++){
int id=0;
for(int j=0;j<bt;j++){
if((i>>j)&1) id^=(1<<(bt-1-j));
}
pq.push_back({id,i+(s+1)/2});
}
sort(pq.begin(),pq.end());
vector<int> xs(s+1),ys(s+1);
for(int i=0;i<pq.size();i++){
xs[pq[i].second]=i;
ys[pq[i].second]=i+(s+1)/2;
}
pq.clear();
for(int i=s;i>=(s+1)/2;i--){
if(pq.size()<a.size()){
pq.push_back({xs[i],i});
}
if(pq.size()<a.size()){
pq.push_back({ys[i],i});
}
}
sort(pq.begin(),pq.end());
//for(auto e:pq) cout<<e.first<<" "<<e.second<<endl;
for(int i=0;i<pq.size();i++){
//cout<<pq[i].second<<" "<<a[i]<<endl;
if(x[pq[i].second]==-1){
x[pq[i].second]=a[i];
}
else{
y[pq[i].second]=a[i];
}
}
/*for(auto e:x) cout<<e<<" ";
cout<<endl;
for(auto e:y) cout<<e<<" ";
cout<<endl;*/
vector<int> use(s+1);
for(int i=s;i>=1;i--){
if(x[i]>=0||y[i]>=0) continue;
if((x[i]==-1||use[-x[i]]==-1)&&(y[i]==-1||use[-y[i]]==-1)){
use[i]=-1;
}
}
vector<int> nid(s+1,1);
int z=1;
for(int i=1;i<=s;i++){
if(use[i]!=-1){
nid[i]=z;
z++;
}
}
/*for(auto e:nid) cout<<e<<" ";
cout<<endl;*/
vector<int> X,Y;
for(int i=1;i<=s;i++){
if(use[i]!=-1){
//cout<<i<<" "<<x[i]<<" "<<y[i]<<endl;
if(x[i]>=0) X.push_back(x[i]);
else X.push_back(-nid[-x[i]]);
if(y[i]>=0) Y.push_back(y[i]);
else Y.push_back(-nid[-y[i]]);
}
}
/*for(auto e:x) cout<<e<<" ";
cout<<endl;
for(auto e:y) cout<<e<<" ";
cout<<endl;
for(auto e:X) cout<<e<<" ";
cout<<endl;
for(auto e:Y) cout<<e<<" ";
cout<<endl;*/
answer(c,X,Y);
}
Compilation message (stderr)
doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:38:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
38 | for(int i=0;i<pq.size();i++){
| ~^~~~~~~~~~
doll.cpp:53:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
53 | for(int i=0;i<pq.size();i++){
| ~^~~~~~~~~~
doll.cpp:19:7: warning: unused variable 'now' [-Wunused-variable]
19 | int now=0;
| ^~~
# | 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... |