제출 #1206305

#제출 시각아이디문제언어결과실행 시간메모리
1206305tkm_algorithms버섯 세기 (IOI20_mushrooms)C++20
92.62 / 100
3 ms448 KiB
/**
*    In the name of Allah
*    We are nothing and you're everything
**/
#include <bits/stdc++.h>
#include "mushrooms.h"
using namespace std;
using ll = long long;

#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
//#define int long long

const char nl = '\n';

//string s;
//int use_machine(vector<int> x) {
	//int cnt = 0;
	//for (int i = 1; i < sz(x); ++i)if (s[x[i]] != s[x[i-1]])cnt += 1;
	//return cnt;
//}

int count_mushrooms(int n) {
	int k = 90, res = 1;
	vector<int> a(1), b;
	
	vector<int> x{0, 1};
	int cnt = use_machine(x);
	if (cnt)b.push_back(1);
	else a.push_back(1), res += 1;
	
	if (n > 2) {
		x.clear(); x = {0, 2};
		cnt = use_machine(x);
		if (cnt)b.push_back(2);
		else a.push_back(2), res += 1;
	}
	
	if (n <= 3)return res;
	
	int i = 3;
	while (i+1 < n && sz(a) < k && sz(b) < k) {
		if (sz(a) >= 2) {
			x = {i, a[0], i+1, a[1]};
			cnt = use_machine(x);
			if (cnt%2 == 1)b.push_back(i);
			else a.push_back(i), res += 1;
			if (cnt >= 2)b.push_back(i+1);
			else a.push_back(i+1), res += 1;
			i += 2;
		} else {
			x = {i, b[0], i+1, b[1]};
			cnt = use_machine(x);
			if (cnt%2 == 1)a.push_back(i), res += 1;
			else b.push_back(i);
			if (cnt >= 2)a.push_back(i+1), res += 1;
			else b.push_back(i+1);
			i += 2;
		}
	}
	
	while (i < n) {
		int mn = min(n-i, max(sz(a), sz(b)));
		if (sz(a) > sz(b)) {
			x.clear();
			for (int j = 0; j < mn; ++j) {
				x.push_back(i+j);
				x.push_back(a[j]);
			}
			cnt = use_machine(x);
			if (cnt&1)b.push_back(i);
			else a.push_back(i);
			res += mn-(cnt+1)/2;
		} else {
			x.clear();
			for (int j = 0; j < mn; ++j) {
				x.push_back(i+j);
				x.push_back(b[j]);
			}
			cnt = use_machine(x);
			if (cnt&1)a.push_back(i);
			else b.push_back(i);
			res += (cnt+1)/2;
		}
		i += mn;
	}
	return res;
}

//int main() {
	//cin >> s;
	//cout << count_mushrooms(sz(s));
//}
#Verdict Execution timeMemoryGrader output
Fetching results...