Submission #308687

# Submission time Handle Problem Language Result Execution time Memory
308687 2020-10-01T17:07:59 Z M4mou Counting Mushrooms (IOI20_mushrooms) C++17
92.623 / 100
9 ms 388 KB
#include <bits/stdc++.h>
#include "mushrooms.h"
using namespace std;

#define mp make_pair
#define pb push_back
#define all(x) x.begin(), x.end()
#define fi first
#define se second
#define inf 1000000000
#define sz(x) (ll)x.size()
#define boost ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
typedef long long ll;
typedef unsigned long long ull;
typedef  double ld;
typedef vector<int> vi;
typedef pair<int,int> pii;
typedef pair< int , pii> piii;
typedef pair<int,bool> pib;
typedef vector<pii> vii;
typedef vector<pib> vib;
typedef vector<vi> vvi;
typedef vector<vii> vvii;
typedef vector<string> vs;
typedef vector<ll> vll;
typedef pair<string,string> pss;
typedef vector<pss> vss;
typedef pair<ld , ld> pdd;
typedef vector<ld> vd;
typedef vector<vector<pib>> vvib;
typedef vector<piii> viii;
typedef vector<viii> vviii;
typedef vector<bool> vb;
typedef pair<pii , bool> piib;
typedef vector<pair<pii , bool>> viib;
const int MOD = 1e9 + 7; //998244353;
const int MAXN = 100005;

string test = "AABABABABAA";
/*
int use_machine(vi a){
    int c = 0;
    for(int i = 0 ;i<a.size()-1;i++){
        if(test[a[i]] != test[a[i+1]])c++;
    }
    return c;
}


 */
vi a, b;

int count_mushrooms(int n) {
	if(n < 226){
	    int c = 1;
	    for(int i = 1;i<n;i++){
	        c += 1 - use_machine({0 , i});
	    }
	    return c;
	}
	int k = 160;
	a.pb(0);
	for(int i = 1;i<=2;i++){
	    if(use_machine({0, i}) == 1)b.pb(i);
	    else a.pb(i);
	}
	int co = 3;
	while(co <= k){
	    if(a.size() >= 2){
	        int x = use_machine({a[0], co , a[1] , co + 1});
	        if(x == 0){
	            a.pb(co);
	            a.pb(co+1);
	        }
	        if(x == 1){
	            a.pb(co);
	            b.pb(co+1);
	        }
            if(x == 2){
                b.pb(co);
                a.pb(co+1);
            }
            if(x == 3){
                b.pb(co);
                b.pb(co+1);
            }
	    }
	    else {
            int x = use_machine({b[0], co , b[1] , co + 1});
            if(x == 0){
                b.pb(co);
                b.pb(co+1);
            }
            if(x == 1){
                b.pb(co);
                a.pb(co+1);
            }
            if(x == 2){
                a.pb(co);
                b.pb(co+1);
            }
            if(x == 3){
                a.pb(co);
                a.pb(co+1);
            }
	    }
	    co += 2;
	}
	int score = 0;
	while(co < n){
	    vi query;
	    if(a.size() > b.size()){
	        for(int i : a){
	            query.pb(i);
	            query.pb(co);
	            co++;
	            if(co == n)break;
	        }
	        int x = use_machine(query);
            if(x&1){
                b.pb(query.back());
                x--;
            }
            else a.pb(query.back());
	        score += ((int)query.size() - x - 1)/2;

	    }
	    else {
            for(int i : b){
                query.pb(i);
                query.pb(co);
                co++;
                if(co == n)break;
            }
            int x = use_machine(query);
            if(x&1){
                a.pb(query.back());
                x--;
            }
            else b.pb(query.back());
            score += x/2;
	    }
	}
    return score + a.size();
}
/*
int main(){

    cout << count_mushrooms(test.size()) << endl;
}
*/
//NEVER GIVE UP
//LONG LONG
# Verdict Execution time Memory Grader output
1 Correct 1 ms 256 KB Output is correct
2 Correct 0 ms 256 KB Output is correct
3 Correct 1 ms 256 KB Output is correct
4 Correct 1 ms 256 KB Output is correct
5 Correct 3 ms 256 KB Output is correct
6 Correct 2 ms 256 KB Output is correct
7 Correct 8 ms 256 KB Output is correct
8 Correct 6 ms 256 KB Output is correct
9 Correct 6 ms 256 KB Output is correct
10 Correct 8 ms 256 KB Output is correct
11 Partially correct 7 ms 256 KB Output is partially correct
12 Correct 7 ms 256 KB Output is correct
13 Correct 6 ms 256 KB Output is correct
14 Correct 6 ms 256 KB Output is correct
15 Partially correct 7 ms 256 KB Output is partially correct
16 Partially correct 7 ms 256 KB Output is partially correct
17 Correct 4 ms 256 KB Output is correct
18 Correct 6 ms 256 KB Output is correct
19 Partially correct 7 ms 256 KB Output is partially correct
20 Correct 7 ms 256 KB Output is correct
21 Correct 8 ms 256 KB Output is correct
22 Partially correct 8 ms 256 KB Output is partially correct
23 Correct 7 ms 256 KB Output is correct
24 Correct 4 ms 256 KB Output is correct
25 Partially correct 6 ms 388 KB Output is partially correct
26 Partially correct 7 ms 256 KB Output is partially correct
27 Partially correct 7 ms 256 KB Output is partially correct
28 Partially correct 7 ms 256 KB Output is partially correct
29 Partially correct 8 ms 256 KB Output is partially correct
30 Partially correct 7 ms 256 KB Output is partially correct
31 Partially correct 8 ms 384 KB Output is partially correct
32 Partially correct 7 ms 256 KB Output is partially correct
33 Partially correct 9 ms 256 KB Output is partially correct
34 Partially correct 9 ms 384 KB Output is partially correct
35 Partially correct 9 ms 256 KB Output is partially correct
36 Partially correct 8 ms 256 KB Output is partially correct
37 Partially correct 8 ms 384 KB Output is partially correct
38 Partially correct 9 ms 256 KB Output is partially correct
39 Partially correct 8 ms 256 KB Output is partially correct
40 Partially correct 8 ms 256 KB Output is partially correct
41 Partially correct 7 ms 256 KB Output is partially correct
42 Partially correct 8 ms 256 KB Output is partially correct
43 Partially correct 7 ms 384 KB Output is partially correct
44 Partially correct 7 ms 256 KB Output is partially correct
45 Partially correct 7 ms 256 KB Output is partially correct
46 Partially correct 7 ms 384 KB Output is partially correct
47 Partially correct 9 ms 256 KB Output is partially correct
48 Partially correct 7 ms 384 KB Output is partially correct
49 Partially correct 6 ms 376 KB Output is partially correct
50 Partially correct 8 ms 256 KB Output is partially correct
51 Partially correct 9 ms 256 KB Output is partially correct
52 Partially correct 7 ms 256 KB Output is partially correct
53 Partially correct 9 ms 256 KB Output is partially correct
54 Partially correct 7 ms 256 KB Output is partially correct
55 Partially correct 9 ms 256 KB Output is partially correct
56 Partially correct 9 ms 256 KB Output is partially correct
57 Partially correct 9 ms 256 KB Output is partially correct
58 Partially correct 7 ms 256 KB Output is partially correct
59 Partially correct 8 ms 256 KB Output is partially correct
60 Partially correct 7 ms 256 KB Output is partially correct
61 Partially correct 7 ms 384 KB Output is partially correct
62 Correct 0 ms 256 KB Output is correct
63 Correct 0 ms 256 KB Output is correct
64 Correct 0 ms 256 KB Output is correct
65 Correct 0 ms 256 KB Output is correct
66 Correct 1 ms 256 KB Output is correct
67 Correct 1 ms 256 KB Output is correct
68 Correct 1 ms 256 KB Output is correct
69 Correct 1 ms 256 KB Output is correct
70 Correct 0 ms 256 KB Output is correct
71 Correct 1 ms 256 KB Output is correct
72 Correct 0 ms 256 KB Output is correct
73 Correct 0 ms 256 KB Output is correct
74 Correct 0 ms 256 KB Output is correct
75 Correct 0 ms 256 KB Output is correct
76 Correct 1 ms 256 KB Output is correct
77 Correct 1 ms 256 KB Output is correct
78 Correct 0 ms 256 KB Output is correct
79 Correct 0 ms 256 KB Output is correct
80 Correct 0 ms 256 KB Output is correct
81 Correct 1 ms 256 KB Output is correct
82 Correct 1 ms 256 KB Output is correct
83 Correct 0 ms 256 KB Output is correct
84 Correct 0 ms 256 KB Output is correct
85 Correct 0 ms 256 KB Output is correct
86 Correct 0 ms 256 KB Output is correct
87 Correct 0 ms 256 KB Output is correct
88 Correct 0 ms 256 KB Output is correct
89 Correct 0 ms 256 KB Output is correct
90 Correct 0 ms 256 KB Output is correct
91 Correct 0 ms 256 KB Output is correct