Submission #1060484

# Submission time Handle Problem Language Result Execution time Memory
1060484 2024-08-15T16:03:10 Z Mihailo Counting Mushrooms (IOI20_mushrooms) C++14
0 / 100
1 ms 344 KB
#include <cstdio>
#include <cstdlib>
#include <cstdarg>
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define xx first
#define yy second
#define pll pair<long long, long long>
#define MOD 1000000007
typedef long long ll;
using namespace std;
mt19937 mt(time(nullptr));

int use_machine(vector<int> x);

ll N, reached, sol;
vector<ll> A, B;

ll next() {
	return ++reached;
}

void identifyA() {
	vector<int> v;
	ll rez;
	while(A.size()<140&&B.size()<140) {
		v.clear();
		v.pb(A[0]);
		v.pb(next());
		v.pb(A[1]);
		v.pb(next());
		rez=use_machine(v);
		if(rez&1) {
			B.pb(reached-1);
		}
		else {
			A.pb(reached-1);
		}
		if(rez&2) {
			B.pb(reached-2);
		}
		else {
			A.pb(reached-2);
		}
	}
}

void identifyB() {
	vector<int> v;
	ll rez;
	while(A.size()<140&&B.size()<140) {
		v.clear();
		v.pb(B[0]);
		v.pb(next());
		v.pb(B[1]);
		v.pb(next());
		rez=use_machine(v);
		if(rez&1) {
			A.pb(reached-1);
		}
		else {
			B.pb(reached-1);
		}
		if(rez&2) {
			A.pb(reached-2);
		}
		else {
			B.pb(reached-2);
		}
	}
}

void testA() {
	vector<int> v;
	sol=A.size();
	while(reached<N) {
		v.clear();
		v.pb(A[0]);
		for(int i=1; i<A.size()&&reached<N; i++) {
			v.pb(next());
			v.pb(A[i]);
		}
		sol+=(v.size()-use_machine(v))/2;
	}
}

void testB() {
	vector<int> v;
	sol=B.size();
	while(reached<N) {
		v.clear();
		v.pb(B[0]);
		for(int i=1; i<B.size()&&reached<N; i++) {
			v.pb(next());
			v.pb(B[i]);
		}
		sol+=(v.size()-use_machine(v))/2;
	}
}

int count_mushrooms(int _N) {
	N=_N;
	vector<int> v;
	if(N<280) {
		sol=1;
		for(int i=1; i<N; i++) {
			v.clear();
			v.pb(0);
			v.pb(i);
			if(!use_machine(v)) sol++;
		}
		return sol;
	}
	A.pb(0);
	v.pb(0);
	v.pb(1);
	if(use_machine(v)) {
		B.pb(1);
		v.pb(2);
		if(use_machine(v)==1) {
			B.pb(2);
			identifyB();
		}
		else {
			A.pb(2);
			identifyA();
		}
	}
	else {
		A.pb(1);
		identifyA();
	}
	if(A.size()>B.size()) {
		testA();
	}
	else {
		testB();
		sol=N-sol;
	}
	return sol;
}

Compilation message

mushrooms.cpp: In function 'void testA()':
mushrooms.cpp:80:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   80 |   for(int i=1; i<A.size()&&reached<N; i++) {
      |                ~^~~~~~~~~
mushrooms.cpp: In function 'void testB()':
mushrooms.cpp:94:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   94 |   for(int i=1; i<B.size()&&reached<N; i++) {
      |                ~^~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 0 ms 344 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 1 ms 344 KB Output is correct
6 Incorrect 0 ms 344 KB Duplicate value 1 in the query array.
7 Halted 0 ms 0 KB -