# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
131655 | mohammedehab2002 | Broken Device (JOI17_broken_device) | C++11 | 220 ms | 3568 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 n,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[])
{
mat[0][0]=1;
for (int i=1;i<8;i++)
{
int k=(1<<(i-1));
for (int j=0;j<k;j++)
{
for (int l=0;l<k;l++)
{
mat[j+k][l]=mat[j][l];
mat[j][l+k]=mat[j][l];
}
}
}
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 k=(1<<(i-1));
for (int j=0;j<k;j++)
{
for (int l=0;l<k;l++)
{
hmat[j+k][l]=hmat[j][l];
hmat[j][l+k]=hmat[j][l];
}
}
}
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... |