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;
vector<int> v[100005], c, x, y;
int b[200005];
void recur(int l, int r, int p, bool q)
{
if (b[r]<0 || l==r)
{
if (q)
y[p-1]=b[r];
else
x[p-1]=b[r];
return;
}
x.push_back(0);
y.push_back(0);
int num=x.size();
if (q)
y[p-1]=-num;
else
x[p-1]=-num;
int mid=(l+r)/2;
recur(l, mid, num, 0);
recur(mid+1, r, num, 1);
}
void create_circuit(int m, vector<int> a)
{
for (int i=0; i<=a.size()-2; i++)
v[a[i]].push_back(a[i+1]);
v[a[a.size()-1]].push_back(0);
v[0].push_back(a[0]);
for (int i=0; i<=m; i++)
{
if (v[i].empty())
{
c.push_back(0);
continue;
}
if (v[i].size()==1)
{
c.push_back(v[i][0]);
continue;
}
x.push_back(0);
y.push_back(0);
int num=x.size();
int sz=v[i].size();
int loog=log2(sz-0.5)+1;
int power=(1<<loog);
int cnt=0;
c.push_back(-num);
for (int j=0; j<power; j++)
{
int cur=0;
for (int k=0; k<loog; k++)
if (j&(1<<k))
cur+=(1<<(loog-k-1));
if (cur>=power-sz)
{
b[cur]=v[i][cnt];
cnt++;
}
else
b[cur]=-num;
}
recur(0, power/2-1, num, 0);
recur(power/2, power-1, num, 1);
}
answer(c, x, y);
}
Compilation message (stderr)
doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:29:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
29 | for (int i=0; i<=a.size()-2; i++)
| ~^~~~~~~~~~~~
# | 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... |