Submission #606509

#TimeUsernameProblemLanguageResultExecution timeMemory
606509CyberCowCounting Mushrooms (IOI20_mushrooms)C++17
0 / 100
2 ms208 KiB
#include "mushrooms.h"
#include <vector>
using namespace std;
vector<int> a, b;
int nsh[20006];

int count_mushrooms(int n) {
	int ans = 1, gt = 0;
	if (n <= 250)
	{
		for (int i = 1; i < n - 1; i += 2)
		{
			ans += 2 - use_machine({ i, 0, i + 1 });
		}
		if (n % 2 == 0)
			ans += 1 - use_machine({ 0, n - 1 });
		return ans;
	}
	int st = 0, st1 = 0;
	a.push_back(0);
	if (use_machine({ 0, 1 }))
	{
		st = 1;
		b.push_back(1);
		if (use_machine({ 0, 2 }))
		{
			st1 = 1;
			b.push_back(2);
		}
		else
		{
			a.push_back(2);
		}
	}
	else
		a.push_back(1);
	if(st == 0)
	{
		for (int i = 3; i < 200; i+=2)
		{
			int qan = use_machine({ 0, i, 1, i + 1 });
			if (qan == 0)
			{
				a.push_back(i);
				a.push_back(i + 1);
			}
			else if(qan == 1)
			{
				a.push_back(i);
				b.push_back(i + 1);
			}
			else if (qan == 2)
			{
				b.push_back(i);
				a.push_back(i + 1);
			}
			else
			{
				b.push_back(i);
				b.push_back(i + 1);
			}
		}
	}
	else if (st == 1 && st1 == 0)
	{
		for (int i = 3; i < 200; i += 2)
		{
			int qan = use_machine({ 0, i, 2, i + 1 });
			if (qan == 0)
			{
				a.push_back(i);
				a.push_back(i + 1);
			}
			else if (qan == 1)
			{
				a.push_back(i);
				b.push_back(i + 1);
			}
			else if (qan == 2)
			{
				b.push_back(i);
				a.push_back(i + 1);
			}
			else
			{
				b.push_back(i);
				b.push_back(i + 1);
			}
		}
	}
	else
	{
		for (int i = 3; i < 200; i += 2)
		{
			int qan = use_machine({ 1, i, 2, i + 1 });
			if (qan == 0)
			{
				b.push_back(i);
				b.push_back(i + 1);
			}
			else if (qan == 1)
			{
				b.push_back(i);
				a.push_back(i + 1);
			}
			else if (qan == 2)
			{
				a.push_back(i);
				b.push_back(i + 1);
			}
			else
			{
				a.push_back(i);
				a.push_back(i + 1);
			}
		}
	}
	ans = a.size();
	int j;
	vector<int> x;
	for (int i = 201; i < n; i++)
	{
		x.clear();
		if (a.size() > b.size())
		{
			int vr = 0;
			for (j = 0; j < a.size() && i + j < n; j++)
			{
				x.push_back(a[j]);
				x.push_back(i + j);
				vr = j;
			}
			int f = use_machine(x);
			ans += vr - f / 2;
			if (f % 2)
			{
				b.push_back(x[x.size() - 2]);
			}
			else
			{
				a.push_back(x[x.size() - 2]);
				ans++;
			}
			i += vr;
		}
		else
		{
			int vr = 0;
			for (j = 0; j < b.size() && i + j < n; j++)
			{
				x.push_back(b[j]);
				x.push_back(i + j);
				vr = j;
			}
			int f = use_machine(x);
			ans += f / 2;
			if (f % 2)
			{
				a.push_back(x[x.size() - 2]);
				ans++;
			}
			else
			{
				b.push_back(x[x.size() - 2]);
			}
			i += vr;
		}
	}
	return ans;
}

Compilation message (stderr)

mushrooms.cpp: In function 'int count_mushrooms(int)':
mushrooms.cpp:127:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  127 |    for (j = 0; j < a.size() && i + j < n; j++)
      |                ~~^~~~~~~~~~
mushrooms.cpp:149:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  149 |    for (j = 0; j < b.size() && i + j < n; j++)
      |                ~~^~~~~~~~~~
mushrooms.cpp:8:15: warning: unused variable 'gt' [-Wunused-variable]
    8 |  int ans = 1, gt = 0;
      |               ^~
#Verdict Execution timeMemoryGrader output
Fetching results...