QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#20349 | #3098. Ancient Machine | 2018ty22# | 5 | 6ms | 3216kb | C++20 | 2.7kb | 2022-02-15 19:33:06 | 2023-01-17 10:44:04 |
Judging History
Anna
#include<cstdio>
#include<vector>
using namespace std;
void Send(int a);
typedef unsigned long long ll;
int max(int a,int b){return a>b?a:b;}
const ll INF=0x8000000000000000ll;
struct node{
int len;
ll h[2001];
node(){len=0;}
node(int x,ll y){len=x;h[0]=y;}
void operator=(ll y){len=1;h[0]=y;}
void operator+=(const node&y){
len=max(len,y.len);
bool jw=0;
for(int i=0;i<len;++i)
{
h[i]+=jw+y.h[i];
if(h[i]>=INF)h[i]^=INF,jw=true;
else jw=false;
}
if(jw)h[len++]=1llu;
}
void operator-=(const node&y){
bool jw=0;
for(int i=0;i<len;++i)
{
h[i]-=y.h[i]+jw;
if(h[i]>=INF)h[i]^=INF,jw=true;
else jw=false;
}
if(!h[len-1])--len;
}
};
void Anna(int N,vector<char> S)
{
int lst=-1;
for(int i=N-1;~i;--i)
if(S[i]=='Z')
{
lst=i;
for(int j=0;j<17;++j)Send((i&(1<<j))>0);
break;
}
if(lst<0)
{
Send(1);return;
}
node ans,vp[2]={};
vp[0]=1;vp[1]=1;
for(int i=0;i<lst;++i)
{
if(S[i]=='X'&&(!i||S[i-1]!='X'))ans+=vp[i&1];
vp[~i&1]+=vp[i&1];
}
for(int i=0;i<ans.len;++i)
for(ll j=0;j<63;++j)
Send(bool(ans.h[i]&(1llu<<j)));
}
Bruno
#include<cstdio>
#include<vector>
using namespace std;
void Remove(int d);
typedef unsigned long long ll;
int max(int a,int b){return a>b?a:b;}
const ll INF=0x8000000000000000ll;
struct node{
int len;
ll h[2001];
node(){len=0;}
node(int x,ll y){len=x;h[0]=y;}
void operator=(ll y){len=1;h[0]=y;}
void operator+=(const node&y){
len=max(len,y.len);
bool jw=0;
for(int i=0;i<len;++i)
{
h[i]+=jw+y.h[i];
if(h[i]>=INF)h[i]^=INF,jw=true;
else jw=false;
}
if(jw)h[len++]=1llu;
}
void operator-=(const node&y){
bool jw=0;
for(int i=0;i<len;++i)
{
h[i]-=y.h[i]+jw;
if(h[i]>=INF)h[i]^=INF,jw=true;
else jw=false;
}
if(!h[len-1])--len;
}
bool operator<(const node&y)const{
if(len!=y.len)return len<y.len;
for(int i=len-1;~i;--i)if(h[i]!=y.h[i])return h[i]<y.h[i];
return false;
}
bool operator<=(const node&y)const{
return!(y<*this);
}
};
void Bruno(int N,int L,vector<int> A)
{
if(L<17){
for(int i=0;i<N;++i)Remove(i);
return;
}
static bool us[100001]={};
int lst=0,lp;
for(int i=0;i<17;++i)
lst|=A[i]<<i;
node ans,vp[2]={};
ans.len=L/63;
for(int i=17;i<L;++i)
if(A[i])
ans.h[(i-17)/63]|=1llu<<ll((i-17)%63);
vp[0]=1llu;vp[1]=1llu;
for(int i=0;i<lst;++i)
vp[~i&1]+=vp[i&1];
for(int i=lst-1;~i;--i)
{
vp[~i&1]-=vp[i&1];
if(vp[i&1]<=ans)ans-=vp[i&1],us[i]=true;
}
lp=lst;
for(int i=lst+1;i<N;++i)Remove(i);
for(int i=lp-1;~i;--i)
if(us[i])
{
for(int j=i+1;j<lst;++j)Remove(j);
Remove(i);
lst=i;
}
for(int i=0;i<lst;++i)Remove(i);
Remove(lp);
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 5
Accepted
Test #1:
score: 100
Accepted
time: 0ms
memory: 3216kb
input:
18 Y X Y Z X Z X X Z Z Y Y Z Y Y Z X X
output:
80 11110000000000000111110000000000000000000000000000000000000000000000000000000000
input:
80 11110000000000000111110000000000000000000000000000000000000000000000000000000000
output:
0 80 3
result:
ok n = 18, D = 80, L = 3
Test #2:
score: 100
Accepted
time: 4ms
memory: 3212kb
input:
18 X Z X Y Y Y X Z X Y Z Z Z Z Y Z Z Y
output:
80 00001000000000000000010100000000000000000000000000000000000000000000000000000000
input:
80 00001000000000000000010100000000000000000000000000000000000000000000000000000000
output:
0 80 3
result:
ok n = 18, D = 80, L = 3
Test #3:
score: 100
Accepted
time: 4ms
memory: 3100kb
input:
18 Y Z Z Y Z X X Z Y Y Z Z Z Y X X Z Y
output:
80 00001000000000000000101111100000000000000000000000000000000000000000000000000000
input:
80 00001000000000000000101111100000000000000000000000000000000000000000000000000000
output:
0 80 2
result:
ok n = 18, D = 80, L = 2
Test #4:
score: 100
Accepted
time: 0ms
memory: 3168kb
input:
18 X Z Z X Z X X Z X Y Y X X Z X Y Z X
output:
80 00001000000000000011100001010000000000000000000000000000000000000000000000000000
input:
80 00001000000000000011100001010000000000000000000000000000000000000000000000000000
output:
0 80 2
result:
ok n = 18, D = 80, L = 2
Test #5:
score: 100
Accepted
time: 4ms
memory: 3176kb
input:
18 X Y X Y Y X X Z Y Z Y X Z Y Y X X Z
output:
80 10001000000000000111011001110000000000000000000000000000000000000000000000000000
input:
80 10001000000000000111011001110000000000000000000000000000000000000000000000000000
output:
0 80 5
result:
ok n = 18, D = 80, L = 5
Test #6:
score: 100
Accepted
time: 4ms
memory: 3124kb
input:
18 X X Y Z X Y Y Y X X Z X X X Z X Z Z
output:
80 10001000000000000011001101110000000000000000000000000000000000000000000000000000
input:
80 10001000000000000011001101110000000000000000000000000000000000000000000000000000
output:
0 80 2
result:
ok n = 18, D = 80, L = 2
Test #7:
score: 100
Accepted
time: 6ms
memory: 3176kb
input:
3 X Y Z
output:
80 01000000000000000100000000000000000000000000000000000000000000000000000000000000
input:
80 01000000000000000100000000000000000000000000000000000000000000000000000000000000
output:
0 80 1
result:
ok n = 3, D = 80, L = 1
Test #8:
score: 100
Accepted
time: 2ms
memory: 3212kb
input:
3 Z Y X
output:
17 00000000000000000
input:
17 00000000000000000
output:
0 17 0
result:
ok n = 3, D = 17, L = 0
Test #9:
score: 100
Accepted
time: 2ms
memory: 3176kb
input:
18 X X X X X X X X X X X X X X X X X X
output:
1 1
input:
1 1
output:
0 1 0
result:
ok n = 18, D = 1, L = 0
Test #10:
score: 100
Accepted
time: 4ms
memory: 3168kb
input:
18 Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
output:
1 1
input:
1 1
output:
0 1 0
result:
ok n = 18, D = 1, L = 0
Test #11:
score: 100
Accepted
time: 0ms
memory: 3168kb
input:
18 Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z
output:
17 10001000000000000
input:
17 10001000000000000
output:
0 17 0
result:
ok n = 18, D = 17, L = 0
Subtask #2:
score: 0
Programme Bruno Runtime Error
Test #12:
score: 0
Programme Bruno Runtime Error
input:
100000 X Z X Z Z X Y Z Y X Y X Z Z Z Y X Z Y X Y Y X Y Y Y Z Y Z Z Y X X Y X X Y Y X X X Z Y Y Y Z Z Z Z Y X Y Y Z Z Z X Y Z X X X X Y X Y X X Z X Z Z Z X Y X X X Z X Z X X X Y Y Y Y Z X X Y Z Y Y X Z X Z Z Z Z Z Y Z Y X Y Y Y Y X Z Z Y Z Z Y Z Z Z X Z Z X X Z Z Z Z X X Z Y Y Z Y Y Z Z Y Y Z Y Z Y Z...
output:
69443 101110010110000110111111111110111001110011100010011111111101101010010011110000000011000101001100001111000011001001101111001111010001011010111010010111111000001100101010001101100100100111110001111010001000101111011011010101010101010101011011001011000101100010100011110010110010010000000011110101...