Submission #1328109

#TimeUsernameProblemLanguageResultExecution timeMemory
1328109PlayVoltzAncient Machine (JOI21_ancient_machine)C++20
100 / 100
42 ms7436 KiB
#include "Anna.h"
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second

int A=63, B=44, f[100];

int encode(vector<int> vect){
	reverse(vect.begin(), vect.end());
	int res=0;
	for (int i=0; i<A; ++i)if (vect[i])res+=f[i];
	return res;
}

void Anna(signed n, vector<char> s){
	f[0]=1;
	f[1]=2;
	for (int i=2; i<=A; ++i)f[i]=f[i-1]+f[i-2];
	vector<int> res;
	int id=0;
	while (id<n&&s[id]!='X')++id;
	if (id==n){
		Send(0);
		return;
	}
	for (int i=0; i<17; ++i)Send(!!((1<<i)&id));
	for (int i=id+1; i<n; ++i){
		if (s[i]=='Z'&&(i==n-1||s[i+1]!='Z'))res.pb(1);
		else res.pb(0);
	}
	while (res.size()%A)res.pb(0);
	for (int i=0; i<res.size(); i+=A){
		vector<int> temp(A);
		for (int j=0; j<A; ++j)temp[j]=res[i+j];
		int c=encode(temp);
		for (int j=0; j<B; ++j)Send(!!(c&(1ll<<j)));
	}
}
#include "Bruno.h"
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second

int A=63, B=44, f[100];
vector<int> vals;

void decode(int a){
	for (int i=A-1; i>=0; --i){
		if (a>=f[i])a-=f[i], vals.pb(1);
		else vals.pb(0);
	}
}

void Bruno(signed n, signed l, vector<signed> a){
	f[0]=1;
	f[1]=2;
	for (int i=2; i<=A; ++i)f[i]=f[i-1]+f[i-2];
	if (l==1){
		for (int i=0; i<n; ++i)Remove(i);
		return;
	}
	int id=0;
	for (int i=0; i<17; ++i)if (a[i])id+=(1<<i);
	vector<int> vect(1, id);
	for (int i=17; i<a.size(); i+=B){
		int res=0;
		for (int j=0; j<B; ++j)if (a[i+j])res+=(1ll<<j);
		decode(res);
	}
	for (int i=0; i<vals.size(); ++i)if (vals[i])vect.pb(i+id+1);
	for (int i=0; i<vect[0]; ++i)Remove(i);
	for (int i=vect.back()+1; i<n; ++i)Remove(i);
	for (int i=1; i<vect.size(); ++i){
		for (int j=vect[i]-1; j>vect[i-1]; --j)Remove(j);
		Remove(vect[i]);
	}
	Remove(vect[0]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...