답안 #627711

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
627711 2022-08-12T19:28:59 Z MilosMilutinovic Broken Device (JOI17_broken_device) C++14
61 / 100
40 ms 2452 KB
#include "Annalib.h"
#include <bits/stdc++.h>
#define rep(i, n) for(int i = 0; i < (int)(n); i ++)
#define rep1(i, n) for(int i = 1; i <= (int)(n); i ++)
#define MP make_pair

using namespace std;
typedef long long LL;
typedef pair<int, int> PII;

vector<int> ord = {126,24,39,3,96,102,108,138,132,60,114,111,30,12,87,147,90,54,129,72,81,42,15,45,141,18,33,57,144,120,9,27,84,75,69,0,123,48,117,21,93,78,135,36,66,6,63,105,99,51};

bool broken[150];

void Anna(int N, long long X, int K, int P[])
{
	rep(i, 150) broken[i] = false;
	rep(i, K) broken[P[i]] = true;
	LL pw = 1;
	while(pw + pw <= X) pw *= 3;
	vector<int> bits;
	while(X > 0) {
		int cc = 0;
		while(X >= pw) cc ++, X -= pw;
		bits.push_back(cc);
		pw /= 3;
	}
	while(pw > 0) {
		bits.push_back(0);
		pw /= 3;
	}
	reverse(bits.begin(), bits.end());
	while(bits.back() == 0) bits.pop_back();
 	int ptr = 0;
 	for(int i : ord) {
		int sum = 0;
		if(!broken[i + 0]) sum ++;
		if(!broken[i + 1]) sum ++;
		if(!broken[i + 2]) sum ++;
		if(ptr >= (int) bits.size() || sum == 0) {
			Set(i + 0, 0);
			Set(i + 1, 0);
			Set(i + 2, 0);
			continue;
		}
		if(bits[ptr] == 0) {
			if(!broken[i + 0]) {
				Set(i + 0, 1);
				Set(i + 1, 0);
				Set(i + 2, 0);
				ptr ++;
				continue;
			}
			if(!broken[i + 1] && !broken[i + 2]) {
				Set(i + 0, 0);
				Set(i + 1, 1);
				Set(i + 2, 1);
				ptr ++;
				continue;
			}
			Set(i + 0, 0);
			Set(i + 1, 0);
			Set(i + 2, 0);
			continue;
		}
		if(bits[ptr] == 1) {
			if(!broken[i + 1]) {
				Set(i + 0, 0);
				Set(i + 1, 1);
				Set(i + 2, 0);
				ptr ++;
				continue;
			}
			if(!broken[i + 0] && !broken[i + 2]) {
				Set(i + 0, 1);
				Set(i + 1, 0);
				Set(i + 2, 1);
				ptr ++;
				continue;
			}
			Set(i + 0, 0);
			Set(i + 1, 0);
			Set(i + 2, 0);
			continue;
		}
		if(bits[ptr] == 2) {
			if(!broken[i + 2]) {
				Set(i + 0, 0);
				Set(i + 1, 0);
				Set(i + 2, 1);
				ptr ++;
				continue;
			}
			if(!broken[i + 0] && !broken[i + 1]) {
				Set(i + 0, 1);
				Set(i + 1, 1);
				Set(i + 2, 0);
				ptr ++;
				continue;
			}
			Set(i + 0, 0);
			Set(i + 1, 0);
			Set(i + 2, 0);
			continue;
		}
		ptr ++;
	}
}
#include "Brunolib.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> ord = {126,24,39,3,96,102,108,138,132,60,114,111,30,12,87,147,90,54,129,72,81,42,15,45,141,18,33,57,144,120,9,27,84,75,69,0,123,48,117,21,93,78,135,36,66,6,63,105,99,51};

long long Bruno(int N, int A[])
{
	long long X = 0, pw = 1;
	for(int i : ord) {
		int sum = A[i] + A[i + 1] + A[i + 2];
		for(int j = 0; j < 3; j++) {
			if(sum == 1 && A[i + j] == 1) {
				X += pw * j;
				pw *= 3;
			}
			if(sum == 2 && A[i + j] == 0) {
				X += pw * j;
				pw *= 3;
			}
		}
	}
	return X;
}
# 결과 실행 시간 메모리 Grader output
1 Partially correct 28 ms 2248 KB Output is partially correct - L* = 33
2 Partially correct 28 ms 2284 KB Output is partially correct - L* = 34
3 Partially correct 28 ms 2304 KB Output is partially correct - L* = 33
4 Partially correct 31 ms 2452 KB Output is partially correct - L* = 31
5 Partially correct 32 ms 2336 KB Output is partially correct - L* = 32
6 Partially correct 40 ms 2196 KB Output is partially correct - L* = 33
7 Partially correct 32 ms 2316 KB Output is partially correct - L* = 30
8 Partially correct 28 ms 2200 KB Output is partially correct - L* = 36
9 Partially correct 28 ms 2296 KB Output is partially correct - L* = 27
10 Partially correct 28 ms 2252 KB Output is partially correct - L* = 31
11 Partially correct 34 ms 2248 KB Output is partially correct - L* = 31
12 Partially correct 32 ms 2260 KB Output is partially correct - L* = 33
13 Partially correct 30 ms 2240 KB Output is partially correct - L* = 27
14 Partially correct 30 ms 2168 KB Output is partially correct - L* = 29
15 Partially correct 35 ms 2236 KB Output is partially correct - L* = 30
16 Partially correct 28 ms 2272 KB Output is partially correct - L* = 31
17 Partially correct 30 ms 2232 KB Output is partially correct - L* = 32
18 Partially correct 28 ms 2248 KB Output is partially correct - L* = 32
19 Partially correct 31 ms 2176 KB Output is partially correct - L* = 33
20 Partially correct 28 ms 2232 KB Output is partially correct - L* = 31
21 Partially correct 28 ms 2224 KB Output is partially correct - L* = 31
22 Partially correct 39 ms 2332 KB Output is partially correct - L* = 29
23 Partially correct 28 ms 2276 KB Output is partially correct - L* = 28
24 Partially correct 39 ms 2368 KB Output is partially correct - L* = 33
25 Partially correct 36 ms 2316 KB Output is partially correct - L* = 29
26 Partially correct 28 ms 2332 KB Output is partially correct - L* = 32
27 Partially correct 28 ms 2320 KB Output is partially correct - L* = 28
28 Partially correct 34 ms 2276 KB Output is partially correct - L* = 30
29 Partially correct 28 ms 2296 KB Output is partially correct - L* = 29
30 Partially correct 31 ms 2360 KB Output is partially correct - L* = 29
31 Partially correct 35 ms 2248 KB Output is partially correct - L* = 30
32 Partially correct 31 ms 2332 KB Output is partially correct - L* = 31
33 Partially correct 28 ms 2308 KB Output is partially correct - L* = 37
34 Partially correct 28 ms 2240 KB Output is partially correct - L* = 25
35 Partially correct 28 ms 2276 KB Output is partially correct - L* = 31
36 Partially correct 33 ms 2184 KB Output is partially correct - L* = 27
37 Partially correct 31 ms 2344 KB Output is partially correct - L* = 28
38 Partially correct 36 ms 2292 KB Output is partially correct - L* = 29
39 Partially correct 35 ms 2368 KB Output is partially correct - L* = 28
40 Partially correct 30 ms 2228 KB Output is partially correct - L* = 31