답안 #1108805

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1108805 2024-11-05T06:44:24 Z hgmhc Coreputer (IOI23_coreputer) C++17
90 / 100
2 ms 508 KB
#include <bits/stdc++.h>
#include "coreputer.h"
using namespace std;
using ll = long long;

ll qcnt;

ll ask(ll x) {
	static int ready[16]{}, cache[16]{};
	
	if (ready[x]) return cache[x];
	ready[x] = true;
	
	vector<int> v;
	for(ll i=0; i<=x; ++i) {
		v.push_back(i);
	}
	++qcnt;
	return cache[x] = run_diagnostic(v);
}

ll ASK(vector<int> v) {
	vector<int> r;
	
	for(ll i=0; i<16; ++i) {
		if (v[i])
			r.push_back(i);
	}
	++qcnt;
	return run_diagnostic(r);
}

vector<int> malfunctioning_cores(int n) {
	ll a=0, b=n-1, z;
	while (a<=b) {
		z=(a+b)/2;
		if (ask(z)<0) a=z+1;
		else b=z-1;
	}
	assert(b<n-1);
	// cerr<<qcnt<<endl;
	// ask(b)<0
	// ask(b+1)>=0
	// ask(b+1)은 0일 수도, 1일 수도 있음
	ll c = 0;
	if (c == b+1) c++;
	
	vector<int> answer(n);
	if (ask(b+1) == 0)
	{
		vector<int> v(16);
		fill(begin(v),begin(v)+b+2,1);
		
		//   b+1  b+2
		// [....][....]
		//    n    n
		answer[b+1] = 1;
		
		for(ll i=0; i<n; ++i) if (i!=b+1 && i!=c) {
			v[i]^=1;
			
			ll r=ASK(v);
			if (r==1) {
				if (i>b+1) answer[i]=1;
				else assert(0);
			}
			else if (r==-1) {
				if (i<=b+1) answer[i]=1;
				else assert(0);
			}
			else {
				answer[i]=0;
			}
			
			v[i]^=1;
		}
		
		if (accumulate(begin(answer),end(answer),0ll)%2 == 1) {
			answer[c] = 1;
		}
	}
	else if (ask(b+1) == 1)
	{
		answer[b+1] = 1;
		
		vector<int> v(16);
		fill(begin(v),begin(v)+b+2,1);
		
		for(ll i=0; i<=b; ++i) if (i!=c) {
			v[i]^=1;
			
			ll r = ASK(v);
			if (r==1) answer[i]=0;
			else if (r==-1) answer[i]=1;
			else assert(0);
			
			v[i]^=1;
		}
		
		if (b+2<n) {
			//     b b+1 b+2
			// [....][1][....]
			//    n       n
			fill(begin(v),begin(v)+b+1,0);
			fill(begin(v)+b+1,begin(v)+n,1);
			
			for(ll i=b+2; i<n; ++i) if (i!=c) {
				v[i]^=1;
				
				ll r = ASK(v);
				if (r==1) answer[i]=0;
				else if (r==-1) answer[i]=1;
				else assert(0);
				
				v[i]^=1;
			}
		}
		
		if (accumulate(begin(answer),end(answer),0ll)%2 == 0) {
			answer[c] = 1;
		}
	} else {
		assert(0);
	}
	
	return answer;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 1 ms 336 KB Output is correct
9 Correct 1 ms 336 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
11 Correct 1 ms 336 KB Output is correct
12 Correct 1 ms 336 KB Output is correct
13 Correct 1 ms 336 KB Output is correct
14 Correct 1 ms 336 KB Output is correct
15 Correct 1 ms 336 KB Output is correct
16 Correct 1 ms 336 KB Output is correct
17 Correct 1 ms 336 KB Output is correct
18 Correct 1 ms 336 KB Output is correct
19 Correct 1 ms 336 KB Output is correct
20 Correct 1 ms 336 KB Output is correct
21 Correct 2 ms 336 KB Output is correct
22 Correct 1 ms 336 KB Output is correct
23 Correct 1 ms 336 KB Output is correct
24 Correct 1 ms 336 KB Output is correct
25 Correct 1 ms 336 KB Output is correct
26 Correct 1 ms 336 KB Output is correct
27 Correct 1 ms 336 KB Output is correct
28 Correct 1 ms 504 KB Output is correct
29 Correct 1 ms 340 KB Output is correct
30 Correct 1 ms 336 KB Output is correct
31 Correct 1 ms 504 KB Output is correct
32 Correct 1 ms 336 KB Output is correct
33 Correct 1 ms 336 KB Output is correct
34 Correct 1 ms 344 KB Output is correct
35 Correct 1 ms 336 KB Output is correct
36 Correct 1 ms 340 KB Output is correct
37 Correct 1 ms 336 KB Output is correct
38 Correct 1 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 1 ms 336 KB Output is correct
9 Correct 1 ms 336 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
11 Correct 1 ms 336 KB Output is correct
12 Correct 1 ms 336 KB Output is correct
13 Correct 1 ms 336 KB Output is correct
14 Correct 1 ms 336 KB Output is correct
15 Correct 1 ms 336 KB Output is correct
16 Correct 1 ms 336 KB Output is correct
17 Correct 1 ms 336 KB Output is correct
18 Correct 1 ms 336 KB Output is correct
19 Correct 1 ms 336 KB Output is correct
20 Correct 1 ms 336 KB Output is correct
21 Correct 1 ms 336 KB Output is correct
22 Correct 1 ms 336 KB Output is correct
23 Correct 1 ms 336 KB Output is correct
24 Correct 2 ms 336 KB Output is correct
25 Correct 1 ms 336 KB Output is correct
26 Correct 1 ms 336 KB Output is correct
27 Correct 1 ms 336 KB Output is correct
28 Correct 1 ms 336 KB Output is correct
29 Correct 1 ms 336 KB Output is correct
30 Correct 1 ms 336 KB Output is correct
31 Correct 1 ms 504 KB Output is correct
32 Correct 1 ms 340 KB Output is correct
33 Correct 1 ms 336 KB Output is correct
34 Correct 1 ms 504 KB Output is correct
35 Correct 1 ms 336 KB Output is correct
36 Correct 1 ms 336 KB Output is correct
37 Correct 1 ms 344 KB Output is correct
38 Correct 1 ms 336 KB Output is correct
39 Correct 1 ms 340 KB Output is correct
40 Correct 1 ms 336 KB Output is correct
41 Correct 1 ms 336 KB Output is correct
42 Correct 1 ms 344 KB Output is correct
43 Correct 1 ms 336 KB Output is correct
44 Correct 1 ms 336 KB Output is correct
45 Correct 1 ms 336 KB Output is correct
46 Correct 1 ms 336 KB Output is correct
47 Correct 1 ms 336 KB Output is correct
48 Correct 1 ms 336 KB Output is correct
49 Correct 1 ms 336 KB Output is correct
50 Correct 1 ms 336 KB Output is correct
51 Correct 1 ms 336 KB Output is correct
52 Correct 1 ms 336 KB Output is correct
53 Correct 1 ms 336 KB Output is correct
54 Correct 1 ms 504 KB Output is correct
55 Correct 1 ms 336 KB Output is correct
56 Correct 1 ms 336 KB Output is correct
57 Correct 1 ms 336 KB Output is correct
58 Correct 1 ms 336 KB Output is correct
59 Correct 1 ms 336 KB Output is correct
60 Correct 1 ms 508 KB Output is correct
61 Correct 1 ms 336 KB Output is correct
62 Correct 1 ms 336 KB Output is correct
63 Correct 1 ms 336 KB Output is correct
64 Correct 1 ms 336 KB Output is correct
65 Correct 1 ms 336 KB Output is correct
66 Correct 1 ms 336 KB Output is correct
67 Correct 1 ms 336 KB Output is correct
68 Correct 1 ms 336 KB Output is correct
69 Correct 1 ms 336 KB Output is correct
70 Correct 1 ms 336 KB Output is correct
71 Correct 1 ms 336 KB Output is correct
72 Correct 1 ms 336 KB Output is correct
73 Correct 1 ms 336 KB Output is correct
74 Correct 1 ms 336 KB Output is correct
75 Correct 1 ms 336 KB Output is correct
76 Correct 1 ms 336 KB Output is correct
77 Correct 1 ms 336 KB Output is correct
78 Correct 1 ms 336 KB Output is correct
79 Correct 1 ms 336 KB Output is correct
80 Correct 1 ms 336 KB Output is correct
81 Correct 1 ms 336 KB Output is correct
82 Partially correct 1 ms 336 KB Output is partially correct