Submission #434802

# Submission time Handle Problem Language Result Execution time Memory
434802 2021-06-21T20:36:10 Z rqi Counting Mushrooms (IOI20_mushrooms) C++14
92.623 / 100
10 ms 584 KB
#include "mushrooms.h"
#include <bits/stdc++.h>
using namespace std;

typedef vector<int> vi;
typedef long double db;

#define pb push_back
#define bk back()

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

mt19937 rng(127);

int count_mushrooms(int n) {
	// cout << fixed << setprecision(6);
	// cout << db(226*100)/(db(98.0)) << "\n";
	vi known[2];
	vi untested;

	int ans = 1;
	known[0].pb(0);
	for(int i = 1; i < n; i++){
		untested.pb(i);
	}
	shuffle(all(untested), rng);

	const int BLOCK = sqrt(n)/2;

	vi p = vi{0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0};

	while(sz(untested)){
		int better_ind = 0;
		if(sz(known[1]) > sz(known[0])) better_ind = 1;

		if(sz(known[better_ind]) < 2 || sz(known[better_ind]) > BLOCK){

			// cout << "known: " << sz(known[better_ind]) << "\n";
			// cout << "untested: " << sz(untested) << "\n";

			vi to_test;

			int to_go = sz(untested);
			int special = untested.bk; untested.pop_back();
			to_test.pb(special);
			to_test.pb(known[better_ind][0]);

			vi tested;

			
			for(int i = 1; i < min(to_go, sz(known[better_ind])); i++){
				tested.pb(untested.bk);
				to_test.pb(untested.bk); untested.pop_back();
				to_test.pb(known[better_ind][i]);
			}

			bool do_special = 0;
			if(sz(untested) > 0){
				do_special = 1;
			}

			int res = use_machine(to_test);

			int special_identity = better_ind;
			if(res % 2 == 0){

			}
			else{
				special_identity^=1;
				
			}
			known[special_identity].pb(special);

			if(special_identity == 0){
				ans++;
			}



			// cout << res/2 << " " << sz(tested) << "\n";
			if(res/2 == sz(tested)){
				for(auto u: tested){
					known[better_ind^1].pb(u);
				}
			}
			else if(res/2 == 0){
				for(auto u: tested){
					known[better_ind].pb(u);
				}
			}

			if(better_ind == 0){
				ans+=sz(tested)-res/2;
			}
			else{
				ans+=res/2;
			}
		}
		else{
			vi tested;
			for(int i = 0; i < 2; i++){
				tested.pb(untested.bk); untested.pop_back();
			}
			vi to_test = vi{tested[0], known[better_ind][0], tested[1], known[better_ind][1]};
			int res = use_machine(to_test);
			for(int i = 0; i < 2; i++){
				int special_ind = better_ind;
				if((res>>i)&1){
					special_ind = better_ind^1;

				}
				else{

				}
				known[special_ind].pb(tested[i]);

				if(special_ind == 0){
					ans++;
				}
			}
		}
		// else{
		// 	cout << "DOING SPECIAL" << "\n";

		// 	vi to_test;
		// 	vi tested;

		// 	cout << "sz(known[better_ind]):" << " " << sz(known[better_ind]) << "\n";
		// 	cout << "sz(untested): " << sz(untested) << "\n";

		// 	int to_go = sz(untested);
		// 	for(int i = 0; i < min(to_go, 2*sz(known[better_ind])); i++){
		// 		tested.pb(untested.bk); untested.pop_back();
		// 	}


			
		// 	cout << "tested: ";
		// 	for(auto u: tested){
		// 		cout << u << " ";
		// 	}

		// 	cout << "\n";
		// 	for(auto u: tested){
		// 		cout << p[u] << " ";
		// 	}

		// 	cout << "\n";

		// 	to_test.pb(tested[0]);
		// 	to_test.pb(known[better_ind][0]);

		// 	for(int i = 1; i+1 < sz(tested); i+=2){
		// 		to_test.pb(tested[i]);
		// 		to_test.pb(tested[i+1]);
		// 		to_test.pb(known[better_ind][(i+1)/2]);
		// 	}

		// 	if(sz(tested) % 2 == 0){
		// 		to_test.pb(tested.bk);
		// 	}

		// 	cout << "to_test: ";
		// 	for(auto u: to_test){
		// 		cout << u << " ";
		// 	}
		// 	cout << "\n";
		// 	for(auto u: to_test){
		// 		cout << p[u] << " ";
		// 	}
		// 	cout << "\n";

		// 	int res = use_machine(to_test);

		// 	cout << "res: " << res << "\n";

		// 	// cout << sz(known[better_ind]) << "\n";

		// 	// cout << res/2 << " " << sz(tested) << "\n";
		// 	// if(res/2 == sz(tested)){
		// 	// 	for(auto u: tested){
		// 	// 		known[better_ind^1].pb(u);
		// 	// 	}
		// 	// }
		// 	// else if(res/2 == 0){
		// 	// 	for(auto u: tested){
		// 	// 		known[better_ind].pb(u);
		// 	// 	}
		// 	// }

		// 	if(better_ind == 0){
		// 		ans+=sz(tested)-res;
		// 	}
		// 	else{
		// 		ans+=res;
		// 	}
		// }

		


	}

	return ans;
}

Compilation message

mushrooms.cpp: In function 'int count_mushrooms(int)':
mushrooms.cpp:58:9: warning: variable 'do_special' set but not used [-Wunused-but-set-variable]
   58 |    bool do_special = 0;
      |         ^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 200 KB Output is correct
2 Correct 1 ms 200 KB Output is correct
3 Correct 1 ms 200 KB Output is correct
4 Correct 1 ms 200 KB Output is correct
5 Correct 1 ms 200 KB Output is correct
6 Correct 3 ms 200 KB Output is correct
7 Correct 6 ms 584 KB Output is correct
8 Correct 6 ms 456 KB Output is correct
9 Correct 7 ms 456 KB Output is correct
10 Correct 9 ms 456 KB Output is correct
11 Partially correct 8 ms 456 KB Output is partially correct
12 Correct 9 ms 456 KB Output is correct
13 Correct 10 ms 456 KB Output is correct
14 Correct 6 ms 328 KB Output is correct
15 Partially correct 7 ms 456 KB Output is partially correct
16 Partially correct 10 ms 456 KB Output is partially correct
17 Correct 5 ms 400 KB Output is correct
18 Correct 8 ms 456 KB Output is correct
19 Partially correct 8 ms 456 KB Output is partially correct
20 Correct 7 ms 456 KB Output is correct
21 Correct 8 ms 456 KB Output is correct
22 Partially correct 8 ms 456 KB Output is partially correct
23 Correct 7 ms 456 KB Output is correct
24 Correct 5 ms 328 KB Output is correct
25 Partially correct 8 ms 456 KB Output is partially correct
26 Partially correct 10 ms 456 KB Output is partially correct
27 Partially correct 8 ms 456 KB Output is partially correct
28 Partially correct 8 ms 456 KB Output is partially correct
29 Partially correct 6 ms 456 KB Output is partially correct
30 Partially correct 9 ms 456 KB Output is partially correct
31 Partially correct 8 ms 456 KB Output is partially correct
32 Partially correct 9 ms 456 KB Output is partially correct
33 Partially correct 8 ms 456 KB Output is partially correct
34 Partially correct 7 ms 456 KB Output is partially correct
35 Partially correct 8 ms 456 KB Output is partially correct
36 Partially correct 7 ms 456 KB Output is partially correct
37 Partially correct 8 ms 456 KB Output is partially correct
38 Partially correct 8 ms 456 KB Output is partially correct
39 Partially correct 7 ms 456 KB Output is partially correct
40 Partially correct 8 ms 456 KB Output is partially correct
41 Partially correct 7 ms 456 KB Output is partially correct
42 Partially correct 8 ms 456 KB Output is partially correct
43 Partially correct 8 ms 456 KB Output is partially correct
44 Partially correct 8 ms 456 KB Output is partially correct
45 Partially correct 8 ms 456 KB Output is partially correct
46 Partially correct 8 ms 456 KB Output is partially correct
47 Partially correct 8 ms 456 KB Output is partially correct
48 Partially correct 8 ms 456 KB Output is partially correct
49 Partially correct 10 ms 456 KB Output is partially correct
50 Partially correct 8 ms 456 KB Output is partially correct
51 Partially correct 9 ms 456 KB Output is partially correct
52 Partially correct 8 ms 456 KB Output is partially correct
53 Partially correct 8 ms 456 KB Output is partially correct
54 Partially correct 7 ms 456 KB Output is partially correct
55 Partially correct 10 ms 456 KB Output is partially correct
56 Partially correct 8 ms 456 KB Output is partially correct
57 Partially correct 8 ms 456 KB Output is partially correct
58 Partially correct 8 ms 456 KB Output is partially correct
59 Partially correct 8 ms 456 KB Output is partially correct
60 Partially correct 8 ms 456 KB Output is partially correct
61 Partially correct 7 ms 456 KB Output is partially correct
62 Correct 1 ms 200 KB Output is correct
63 Correct 1 ms 200 KB Output is correct
64 Correct 1 ms 200 KB Output is correct
65 Correct 1 ms 200 KB Output is correct
66 Correct 0 ms 200 KB Output is correct
67 Correct 0 ms 200 KB Output is correct
68 Correct 0 ms 200 KB Output is correct
69 Correct 1 ms 200 KB Output is correct
70 Correct 1 ms 200 KB Output is correct
71 Correct 0 ms 200 KB Output is correct
72 Correct 0 ms 200 KB Output is correct
73 Correct 1 ms 200 KB Output is correct
74 Correct 0 ms 200 KB Output is correct
75 Correct 0 ms 200 KB Output is correct
76 Correct 0 ms 200 KB Output is correct
77 Correct 1 ms 200 KB Output is correct
78 Correct 0 ms 200 KB Output is correct
79 Correct 0 ms 200 KB Output is correct
80 Correct 0 ms 200 KB Output is correct
81 Correct 1 ms 200 KB Output is correct
82 Correct 1 ms 200 KB Output is correct
83 Correct 1 ms 200 KB Output is correct
84 Correct 0 ms 200 KB Output is correct
85 Correct 0 ms 200 KB Output is correct
86 Correct 1 ms 200 KB Output is correct
87 Correct 1 ms 200 KB Output is correct
88 Correct 0 ms 200 KB Output is correct
89 Correct 0 ms 200 KB Output is correct
90 Correct 1 ms 200 KB Output is correct
91 Correct 1 ms 200 KB Output is correct