# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
132464 | mohammedehab2002 | Broken Device (JOI17_broken_device) | C++11 | 229 ms | 3560 KiB |
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 "Annalib.h"
#include <bits/stdc++.h>
using namespace std;
int ans[155],pos[128];
bitset<129> mat[128],bas[128];
void add(int r)
{
for (int i=0;i<128;i++)
{
if (mat[r][i])
mat[r]^=bas[i];
}
for (int i=0;i<128;i++)
{
if (mat[r][i])
{
bas[i]=mat[r];
pos[r]=i;
return;
}
}
}
void Anna(int n,long long x,int k,int p[])
{
for (int i=0;i<128;i++)
mat[i].reset();
mat[0][0]=1;
for (int i=1;i<8;i++)
{
int len=(1<<(i-1));
for (int j=0;j<len;j++)
{
for (int l=0;l<len;l++)
{
mat[j+len][l]=mat[j][l];
mat[j][l+len]=mat[j][l];
}
}
}
mt19937 rng(12742127);
shuffle(mat,mat+128,rng);
for (int i=0;i<128;i++)
{
bas[i].reset();
for (int j=0;j<k;j++)
mat[i][p[j]]=0;
}
memset(pos,-1,sizeof(pos));
memset(ans,-1,sizeof(ans));
for (int i=0;i<128;i++)
{
if (i<60)
{
bool b=(x&(1LL<<i));
mat[i][128]=b;
}
else
mat[i][128]=0;
add(i);
}
for (int i=127;i>=0;i--)
{
if (pos[i]==-1)
continue;
for (int j=0;j<i;j++)
{
if (mat[j][pos[i]])
mat[j]^=mat[i];
}
}
for (int i=0;i<128;i++)
{
if (pos[i]!=-1)
ans[pos[i]]=mat[i][128];
}
for (int i=0;i<n;i++)
{
if (ans[i]==-1)
ans[i]=0;
Set(i,ans[i]);
}
}
#include "Brunolib.h"
#include <bits/stdc++.h>
using namespace std;
bitset<128> hmat[128];
long long Bruno(int n,int a[])
{
hmat[0][0]=1;
for (int i=1;i<8;i++)
{
int len=(1<<(i-1));
for (int j=0;j<len;j++)
{
for (int l=0;l<len;l++)
{
hmat[j+len][l]=hmat[j][l];
hmat[j][l+len]=hmat[j][l];
}
}
}
mt19937 rng(12742127);
shuffle(hmat,hmat+128,rng);
long long x=0;
for (int i=0;i<60;i++)
{
long long cur=0;
for (int j=0;j<n;j++)
{
if (hmat[i][j])
cur^=a[j];
}
x|=(cur<<i);
}
return x;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |