# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1183866 | WH8 | Ancient Machine (JOI21_ancient_machine) | C++20 | 0 ms | 0 KiB |
#include "Anna.h"
#include <bits/stdc++.h>
using namespace std;
void Anna(int n, vector<char> s) {
for(int i=0;i<n;i++){
if(s[i]=='X'){
Send(0);
Send(0);
}
else if (s[i]=='Y'){
Send(0);
Send(1);
}
else{
Send(1);
Send(0);
}
}
}
#include "Bruno.h"
#include <bits/stdc++.h>
using namespace std;
bool out[100005];
int N;
void rem(int x){
if(0<=x and x<n and !out[x]){
out[x]=true;
Remove(x);
}
}
void Bruno(int n, int l, vector<int> a) {
N=n;
vector<int> s;
assert(n*2==l);
for(int i=0;i<l/2;i++){
int t=a[i*2]*2+a[i*2+1];
s.push_back(t);
//~ cout<<t;
}
int fx=n, lz=-1;
vector<int> px(n,-1), pz(n,-1), nz(n,n);
for(int i=0;i<n;i++){
if(i!=0)px[i]=px[i-1];
if(s[i]==0){fx=min(fx,i);px[i]=i;}
if(i!=0)pz[i]=pz[i-1];
if(s[i]==2){pz[i]=i;}
}
for(int i=n-1;i>=0;i--){
if(i!=n-1)nz[i]=nz[i+1];
if(s[i]==2){nz[i]=i;lz=max(lz,i);}
}
for(int i=0;i<fx;i++){
rem(i);
}
for(int i=lz+1;i<n;i++){
rem(i);
}
for(int i=fx+1;i<=lz;){
for(int j=nz[i]-1;j>max(fx,pz[i]);j--){
rem(j);
}
rem(nz[i]);
i=nz[i]+1;
}
rem(fx);
}