답안 #523079

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
523079 2022-02-07T02:35:41 Z amunduzbaev Ancient Machine (JOI21_ancient_machine) C++17
0 / 100
2000 ms 2116 KB
#include "Anna.h"
#include "bits/stdc++.h"
using namespace std;

#define ar array

void Anna(int n, vector<char> s) {
	vector<int> res(n);
	ar<int, 3> last {n, n, n};
	vector<ar<int, 3>> par(n);
	for(int i=n-1;~i;i--){
		last[s[i] - 'X'] = i;
		par[i] = last;
	}
	
	int i = par[0][0];
	if(i < n){
		int j = i; res[i] = 1;
		while(j < n){
			j = par[j][1];
			int l = par[j][2];
			if(l < n){
				res[j] = res[l] = 1;
			} j = l;
		}
	}
	
	//~ for(int i=0;i<n;i++) cout<<res[i]<<" ";
	//~ cout<<endl;
	for(int i=0;i<n;i++){
		Send(res[i]);
	}
}
#include "Bruno.h"
#include "bits/stdc++.h"
using namespace std;

void Bruno(int n, int l, vector<int> a) {
	vector<int> res, tot;
	for(int i=0;i<n;i++){
		if(a[i]) tot.push_back(i);
	}
	auto add = [&](int l, int r){
		for(int i=l;i<=r;i++){
			//~ cout<<i<<endl;
			Remove(i);
		}
	};
	if((int)tot.size() >= 3){
		assert((int)tot.size()&1);
		add(0, tot[0] - 1);
		int last = tot[0];
		for(int i=1;i<(int)tot.size();i+=2){
			add(last + 1, tot[i] - 1);
			add(tot[i] + 1, tot[i+1] - 1);
			Remove(tot[i]);
			//~ cout<<tot[i]<<endl;
			Remove(tot[i+1]);
			//~ cout<<tot[i+1]<<endl;
			last = tot[i+1];
		}
		Remove(tot[0]);
		//~ cout<<tot[0]<<endl;
		add(last + 1, n - 1);
	} else {
		add(0, n - 1);
	}
}
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2068 ms 204 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2055 ms 2116 KB Time limit exceeded
2 Halted 0 ms 0 KB -