Submission #424290

#TimeUsernameProblemLanguageResultExecution timeMemory
424290SupersonicCounting Mushrooms (IOI20_mushrooms)C++14
90.04 / 100
10 ms340 KiB
#include "mushrooms.h"
#include <bits/stdc++.h>
using namespace std;
int o(int n){
	int b=-1,m=1e9;
	for(int i=1;i<n;i++){
		if(2*i+(n-(2*i))/i<m){m=2*i+(n-(2*i))/i;b=i;}
	}
	return max(2,b);
}
int count_mushrooms(int n) {
	vector<int> a={0};
	vector<int> b;int c=1;
	int p=o(n);cerr<<p<<endl;
	while(a.size()<2&&b.size()<2&&c<n){
		int k=use_machine({0,c});
		if(k==1)b.push_back(c);else a.push_back(c);
		c++;
	}
	if(c==n)return a.size();
	if(a.size()==2){
		while(a.size()<p&&b.size()<p&&c<n-1){
			int k=use_machine({a[0],c,a[1],c+1});
			if(k==3){b.push_back(c);b.push_back(c+1);}
			if(k==2){b.push_back(c);a.push_back(c+1);}
			if(k==1){a.push_back(c);b.push_back(c+1);}
			if(k==0){a.push_back(c);a.push_back(c+1);}
			c+=2;
		}
		if(c==n-1){
			int k=use_machine({a[0],c});
			if(k==1){b.push_back(c);}
			else a.push_back(c);
			c++;
		}
	}
	else {
		while(a.size()<p&&b.size()<p&&c<n-1){
			int k=use_machine({b[0],c,b[1],c+1});
			if(k==3){a.push_back(c);a.push_back(c+1);}
			if(k==2){a.push_back(c);b.push_back(c+1);}
			if(k==1){b.push_back(c);a.push_back(c+1);}
			if(k==0){b.push_back(c);b.push_back(c+1);}
			c+=2;
		}
		if(c==n-1){
			int k=use_machine({b[0],c});
			if(k==1){a.push_back(c);}
			else b.push_back(c);
			c++;
		}
	}
	int ca=a.size(),cb=b.size();
	if(c==n)return ca;
	//for(auto i:a)cerr<<i<<' ';cerr<<endl;
	if(a.size()>=p){
		//cerr<<a[0]<<':'<<a[1]<<endl;
		while(c<n){
			vector<int> r;
			for(auto i:a){r.push_back(i);r.push_back(c);c++;if(c==n)break;}
			//for(auto i:r)cerr<<i<<' ';cerr<<endl;
			int k=use_machine(r);if(k%2==0)a.push_back(r.back());
			cb+=(k+1)/2;
		}
		return n-cb;
	}
	else {
		while(c<n){
			vector<int> r;
			for(auto i:b){r.push_back(i);r.push_back(c);c++;if(c==n)break;}
			//for(auto i:r)cerr<<i<<' ';cerr<<endl;
			int k=use_machine(r);if(k%2==0)b.push_back(r.back());
			ca+=(k+1)/2;
		}
		return ca;
	}
	exit(1);
}

Compilation message (stderr)

mushrooms.cpp: In function 'int count_mushrooms(int)':
mushrooms.cpp:22:17: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   22 |   while(a.size()<p&&b.size()<p&&c<n-1){
      |         ~~~~~~~~^~
mushrooms.cpp:22:29: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   22 |   while(a.size()<p&&b.size()<p&&c<n-1){
      |                     ~~~~~~~~^~
mushrooms.cpp:38:17: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   38 |   while(a.size()<p&&b.size()<p&&c<n-1){
      |         ~~~~~~~~^~
mushrooms.cpp:38:29: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   38 |   while(a.size()<p&&b.size()<p&&c<n-1){
      |                     ~~~~~~~~^~
mushrooms.cpp:56:13: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   56 |  if(a.size()>=p){
      |     ~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...