Submission #1179382

#TimeUsernameProblemLanguageResultExecution timeMemory
1179382khusanov45Ancient Machine (JOI21_ancient_machine)C++17
0 / 100
35 ms6592 KiB
#include "Anna.h"
#include <vector>
#include <iostream>

using namespace std;

#define ll long long

namespace {

vector<ll> fib;

void initFib() {
    fib.push_back(0);
    fib.push_back(1);

    for (int i = 2; i <= 66; ++i){
        fib.push_back(fib[i-2] + fib[i-1]);
    }
}

ll handleArray(vector<bool> & b, int l, int r) {
    ll score = 0;

    for (int i = l; i < min(b.size(), size_t(r)); ++i){
        score += b[i] * fib[r-i];
    }

    return score;
}

void sendSignals(ll x){
    for (int i = 43; i >= 0; --i){
        Send((x >> i) & 1);
    }
}
  
}

void Anna(int N, vector<char> S) {
    initFib();
    vector<bool> b(N, 0);

    int i = -1;
    while (++i < N && S[i] != 'X');

    if (i == N){
        return;
    }

    b[i++] = 1;

    for (; i < N; ++i){
        if (i + 1 < N && S[i] == S[i+1]){
            continue;
        }
        b[i] = S[i] == 'Z';
    }

    for (int l = 0; l < N; l += 64){
        ll permutation = handleArray(b, l, l+64);
        sendSignals(permutation);
    }
}
#include "Bruno.h"
#include <vector>
#include <iostream>

using namespace std;

#define ll long long

namespace {


vector<ll> fib;

void initFib() {
	fib.push_back(0);
	fib.push_back(1);

	for (int i = 2; i <= 66; ++i){
		fib.push_back(fib[i-2] + fib[i-1]);
	}
}

ll getNumber(vector<int> & a, int start){
	ll ans = 0;	

	for (int i = start; i < start + 44; ++i){
		ans <<= 1;
		ans += a[i];
	}

	return ans;
}

void deriveSequence(ll number, vector<int> & result){
	for (int i = 64; i >= 1; --i){
		if (fib[i] <= number){
			number -= fib[i];
			result.push_back(1);
		}
		else{
			result.push_back(0);
		}
	}
}

}

void Bruno(int N, int L, std::vector<int> A) {
	if (L == 0){
		for (int i = 0; i < N; ++i){
			Remove(i);
		}
		return;
	}
	initFib();
	
	// for (auto & it : A){
	// 	cout << it;
	// }
	// cout << endl;

	vector<int> result;

	for (int l = 0; l < L; l += 44){
		ll number = getNumber(A, l);
		//cout << number << endl;
		deriveSequence(number, result);
	}

	for (auto & it : result){
		cout << it;
	}
	cout << endl;

	vector<int> ones;
	for (int i = 0; i < result.size(); ++i){
		if (result[i] == 1){
			ones.push_back(i);
		}
	}
	// PreX
	for (int i =0; i != ones.front();++i){
		Remove(i);
	}

	for (int i = 1; i < ones.size(); ++i){
		for (int j = ones[i]-1; j > ones[i-1]; --j){
			Remove(j);
		}
		Remove(ones[i]);
	}

	Remove(ones[0]);

	// cout << ones.back()+1 << endl;
	// cout << N << endl;

	for (int j = ones.back()+1; j < N; ++j){
		Remove(j);
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...