Submission #487914

# Submission time Handle Problem Language Result Execution time Memory
487914 2021-11-17T03:59:52 Z i_am_noob Minerals (JOI19_minerals) C++17
80 / 100
49 ms 7364 KB
#include "minerals.h"

#pragma GCC target("avx2")
#include<bits/stdc++.h>
#pragma GCC optimize("unroll-loops")
using namespace std;

#define ll long long
//#define int ll
#define ull unsigned long long
#define ld long double
#define rep(a) rep1(i,a)
#define rep1(i,a) rep2(i,0,a)
#define rep2(i,b,a) for(int i=(b); i<((int)(a)); i++)
#define rep3(i,b,a) for(int i=(b); i>=((int)(a)); i--)
#define all(a) a.begin(),a.end()
#define pii pair<int,int>
#define pb push_back
#define inf 1010000000
//#define inf 4000000000000000000
#define eps 1e-9
#define sz(a) ((int)a.size())
#define pow2(x) (1ll<<(x))
#define ceiling(a,b) (((a)+(b)-1)/(b))
#ifdef i_am_noob
#define bug(...) cerr << "#" << __LINE__ << ' ' << #__VA_ARGS__ << "- ", _do(__VA_ARGS__)
template<typename T> void _do(T && x) {cerr << x << endl;}
template<typename T, typename ...S> void _do(T && x, S&&...y) {cerr << x << ", "; _do(y...);}
#else
#define bug(...) 826
#endif

const int maxn=43005;

int x,out_id[2][maxn];
bool a[2][maxn];

inline bool query(int id1, int id2){
	int y=Query(out_id[id1][id2]);
	a[id1][id2]^=1;
	bool flag=x!=y;
	x=y;
	return flag;
}

void Solve(int n){
	x=0;
	int cur1=0,cur2=0;
	rep(2*n){
		int y=Query(i+1);
		if(y>x){
			out_id[0][cur1++]=i+1;
		}
		else{
			out_id[1][cur2++]=i+1;
		}
		x=y;
	}
	assert(cur1==n&&cur2==n);
	rep(n) a[0][i]=1;
	vector<vector<int>> vec;
	vec.pb({});
	rep(n) vec.back().pb(i);
	rep1(_,16){
		if(sz(vec)==n) break;
		int cur=0;
		for(auto& vv: vec){
			if(sz(vv)==1){
				cur++;
				continue;
			}
			int s=pow2(__lg(sz(vv)-1));
			rep(sz(vv)){
				if(i<s&&!a[1][cur+i]) query(1,cur+i);
				if(i>=s&&a[1][cur+i]) query(1,cur+i);
			}
			cur+=sz(vv);
		}
		assert(cur==n);
		vector<vector<int>> nvec;
		for(auto& vv: vec){
			if(sz(vv)==1){
				nvec.pb(vv);
				continue;
			}
			int s=pow2(__lg(sz(vv)-1));
			bool good[sz(vv)];
			memset(good,0,sizeof good);
			nvec.pb({});
			rep(sz(vv)-1){
				good[i]=query(0,vv[i]);
				if(good[i]) nvec.back().pb(vv[i]);
			}
			if(count(good,good+sz(vv),1)!=s){
				good[sz(vv)-1]=1;
				nvec.back().pb(vv.back());
			}
			assert(sz(nvec.back())==s);
			nvec.pb({});
			rep(sz(vv)) if(!good[i]) nvec.back().pb(vv[i]);
			assert(sz(nvec.back())==sz(vv)-s);
		}
		vec=nvec;
	}
	assert(sz(vec)==n);
	rep(n){
		Answer(out_id[1][i],out_id[0][vec[i][0]]);
	}
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 328 KB Output is correct
4 Correct 1 ms 248 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 456 KB Output is correct
2 Correct 2 ms 584 KB Output is correct
3 Correct 4 ms 968 KB Output is correct
4 Correct 7 ms 1632 KB Output is correct
5 Correct 15 ms 2828 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 328 KB Output is correct
4 Correct 1 ms 248 KB Output is correct
5 Correct 2 ms 456 KB Output is correct
6 Correct 2 ms 584 KB Output is correct
7 Correct 4 ms 968 KB Output is correct
8 Correct 7 ms 1632 KB Output is correct
9 Correct 15 ms 2828 KB Output is correct
10 Correct 1 ms 456 KB Output is correct
11 Correct 15 ms 2080 KB Output is correct
12 Correct 16 ms 2908 KB Output is correct
13 Correct 16 ms 2848 KB Output is correct
14 Correct 12 ms 2772 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 328 KB Output is correct
4 Correct 1 ms 248 KB Output is correct
5 Correct 2 ms 456 KB Output is correct
6 Correct 2 ms 584 KB Output is correct
7 Correct 4 ms 968 KB Output is correct
8 Correct 7 ms 1632 KB Output is correct
9 Correct 15 ms 2828 KB Output is correct
10 Correct 1 ms 456 KB Output is correct
11 Correct 15 ms 2080 KB Output is correct
12 Correct 16 ms 2908 KB Output is correct
13 Correct 16 ms 2848 KB Output is correct
14 Correct 12 ms 2772 KB Output is correct
15 Correct 43 ms 6972 KB Output is correct
16 Correct 42 ms 6868 KB Output is correct
17 Correct 34 ms 6920 KB Output is correct
18 Correct 31 ms 6796 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 328 KB Output is correct
4 Correct 1 ms 248 KB Output is correct
5 Correct 2 ms 456 KB Output is correct
6 Correct 2 ms 584 KB Output is correct
7 Correct 4 ms 968 KB Output is correct
8 Correct 7 ms 1632 KB Output is correct
9 Correct 15 ms 2828 KB Output is correct
10 Correct 1 ms 456 KB Output is correct
11 Correct 15 ms 2080 KB Output is correct
12 Correct 16 ms 2908 KB Output is correct
13 Correct 16 ms 2848 KB Output is correct
14 Correct 12 ms 2772 KB Output is correct
15 Correct 43 ms 6972 KB Output is correct
16 Correct 42 ms 6868 KB Output is correct
17 Correct 34 ms 6920 KB Output is correct
18 Correct 31 ms 6796 KB Output is correct
19 Correct 49 ms 7164 KB Output is correct
20 Correct 45 ms 7128 KB Output is correct
21 Correct 31 ms 7120 KB Output is correct
22 Correct 33 ms 6940 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 328 KB Output is correct
4 Correct 1 ms 248 KB Output is correct
5 Correct 2 ms 456 KB Output is correct
6 Correct 2 ms 584 KB Output is correct
7 Correct 4 ms 968 KB Output is correct
8 Correct 7 ms 1632 KB Output is correct
9 Correct 15 ms 2828 KB Output is correct
10 Correct 1 ms 456 KB Output is correct
11 Correct 15 ms 2080 KB Output is correct
12 Correct 16 ms 2908 KB Output is correct
13 Correct 16 ms 2848 KB Output is correct
14 Correct 12 ms 2772 KB Output is correct
15 Correct 43 ms 6972 KB Output is correct
16 Correct 42 ms 6868 KB Output is correct
17 Correct 34 ms 6920 KB Output is correct
18 Correct 31 ms 6796 KB Output is correct
19 Correct 49 ms 7164 KB Output is correct
20 Correct 45 ms 7128 KB Output is correct
21 Correct 31 ms 7120 KB Output is correct
22 Correct 33 ms 6940 KB Output is correct
23 Correct 45 ms 7364 KB Output is correct
24 Correct 49 ms 7332 KB Output is correct
25 Correct 35 ms 7336 KB Output is correct
26 Correct 33 ms 7236 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 328 KB Output is correct
4 Correct 1 ms 248 KB Output is correct
5 Correct 2 ms 456 KB Output is correct
6 Correct 2 ms 584 KB Output is correct
7 Correct 4 ms 968 KB Output is correct
8 Correct 7 ms 1632 KB Output is correct
9 Correct 15 ms 2828 KB Output is correct
10 Correct 1 ms 456 KB Output is correct
11 Correct 15 ms 2080 KB Output is correct
12 Correct 16 ms 2908 KB Output is correct
13 Correct 16 ms 2848 KB Output is correct
14 Correct 12 ms 2772 KB Output is correct
15 Correct 43 ms 6972 KB Output is correct
16 Correct 42 ms 6868 KB Output is correct
17 Correct 34 ms 6920 KB Output is correct
18 Correct 31 ms 6796 KB Output is correct
19 Correct 49 ms 7164 KB Output is correct
20 Correct 45 ms 7128 KB Output is correct
21 Correct 31 ms 7120 KB Output is correct
22 Correct 33 ms 6940 KB Output is correct
23 Correct 45 ms 7364 KB Output is correct
24 Correct 49 ms 7332 KB Output is correct
25 Correct 35 ms 7336 KB Output is correct
26 Correct 33 ms 7236 KB Output is correct
27 Incorrect 39 ms 5060 KB Wrong Answer [2]
28 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 328 KB Output is correct
4 Correct 1 ms 248 KB Output is correct
5 Correct 2 ms 456 KB Output is correct
6 Correct 2 ms 584 KB Output is correct
7 Correct 4 ms 968 KB Output is correct
8 Correct 7 ms 1632 KB Output is correct
9 Correct 15 ms 2828 KB Output is correct
10 Correct 1 ms 456 KB Output is correct
11 Correct 15 ms 2080 KB Output is correct
12 Correct 16 ms 2908 KB Output is correct
13 Correct 16 ms 2848 KB Output is correct
14 Correct 12 ms 2772 KB Output is correct
15 Correct 43 ms 6972 KB Output is correct
16 Correct 42 ms 6868 KB Output is correct
17 Correct 34 ms 6920 KB Output is correct
18 Correct 31 ms 6796 KB Output is correct
19 Correct 49 ms 7164 KB Output is correct
20 Correct 45 ms 7128 KB Output is correct
21 Correct 31 ms 7120 KB Output is correct
22 Correct 33 ms 6940 KB Output is correct
23 Correct 45 ms 7364 KB Output is correct
24 Correct 49 ms 7332 KB Output is correct
25 Correct 35 ms 7336 KB Output is correct
26 Correct 33 ms 7236 KB Output is correct
27 Incorrect 39 ms 5060 KB Wrong Answer [2]
28 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 328 KB Output is correct
4 Correct 1 ms 248 KB Output is correct
5 Correct 2 ms 456 KB Output is correct
6 Correct 2 ms 584 KB Output is correct
7 Correct 4 ms 968 KB Output is correct
8 Correct 7 ms 1632 KB Output is correct
9 Correct 15 ms 2828 KB Output is correct
10 Correct 1 ms 456 KB Output is correct
11 Correct 15 ms 2080 KB Output is correct
12 Correct 16 ms 2908 KB Output is correct
13 Correct 16 ms 2848 KB Output is correct
14 Correct 12 ms 2772 KB Output is correct
15 Correct 43 ms 6972 KB Output is correct
16 Correct 42 ms 6868 KB Output is correct
17 Correct 34 ms 6920 KB Output is correct
18 Correct 31 ms 6796 KB Output is correct
19 Correct 49 ms 7164 KB Output is correct
20 Correct 45 ms 7128 KB Output is correct
21 Correct 31 ms 7120 KB Output is correct
22 Correct 33 ms 6940 KB Output is correct
23 Correct 45 ms 7364 KB Output is correct
24 Correct 49 ms 7332 KB Output is correct
25 Correct 35 ms 7336 KB Output is correct
26 Correct 33 ms 7236 KB Output is correct
27 Incorrect 39 ms 5060 KB Wrong Answer [2]
28 Halted 0 ms 0 KB -