답안 #544506

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
544506 2022-04-02T07:03:13 Z model_code Broken Device 2 (JOI22_device2) C++17
100 / 100
102 ms 2884 KB
#include <utility>
#include <vector>

#include "Anna.h"

namespace {
	long long int dp[200];
};

int Declare(void) {

	dp[1] = 1;
	dp[2] = 1;
	dp[3] = 2;
	for (int i = 4; i <= 140; i++) {
		dp[i] = dp[i - 2] + dp[i - 3] + 1;
	}

	return 140;
}

std::pair<std::vector<int>, std::vector<int> > Anna(long long int A) {
	std::vector<int> s, t;

	A--;
	long long int parity = A % 2;
	A /= 2;
	A++;

	long long int sum = 0;
	int len = 0;
	while (sum < A) {
		sum += dp[++len];
	}

	long long int k = A - (sum - dp[len]);
	std::vector<int> arr;
	int index = len;
	while (true) {
		// A-th in lex order
		if (k == 1) {
			break;
		} else if (k <= dp[index - 2] + 1) {
			arr.push_back(2);
			k -= 1;
			index -= 2;
		} else {
			arr.push_back(3);
			k -= (dp[index - 2] + 1);
			index -= 3;
		}
	}

	// std::vector<int> arr;
	// for (int i = 0; i < 60; i++) {
	// 	if ((A >> i) & 1LL) {
	// 		arr.push_back(3);
	// 	} else {
	// 		arr.push_back(2);
	// 	}
	// }

	int b = 1;
	s.push_back(b);
	for (int i = 0; i < arr.size(); i++) {
		if (arr[i] == 3) b ^= 1;
		for (int j = 0; j < arr[i]; j++) {
			s.push_back(b);
		}
	}
	int sz = s.size();
	while (sz < len) {
		b ^= 1;
		s.push_back(b);
		sz++;
	}

	for (int i = 0; i < s.size(); i++) {
		t.push_back(1 - i % 2);
	}

	if (parity) {
		for (int i = 0; i < s.size(); i++) {
			s[i] ^= 1;
			t[i] ^= 1;
		}
	}

	return std::make_pair(s, t);
}
#include <utility>
#include <vector>

#include "Bruno.h"


namespace {
	long long int dp[200];
};

long long int Bruno(std::vector<int> u) {
	long long int guess = 0;

	long long int len = u.size() / 2;

	long long int parity = 0;
	if (u[0] == 0) {
		parity = 1;
		for (int i = 0; i < len * 2; i++) {
			u[i] ^= 1;
		}
	}


	dp[1] = 1;
	dp[2] = 1;
	dp[3] = 2;
	for (int i = 4; i <= 140; i++) {
		dp[i] = dp[i - 2] + dp[i - 3] + 1;
	}


	/*
	 *         b == 1:
	 *  1| {11/000}
	 * |1
	 *     OR
	 * |1  {11/000}
	 *  1|

	 *         b == 0:
	 * |0  {00/111}
	 * |1
	 *     OR
	 *  0| {00/111}
	 *  1|
	 */
	std::vector<int> arr;
	int sum = +1;
	int look = 1;
	int b = 1;
	while (look < len * 2) {
		sum += ((u[look] == 1) ? +1 : -1);

		if (b == 1) {
			if (sum == +3) {
				arr.push_back(2);
				sum = +1;
				b = 1;
			} else if (sum == -1) {
				arr.push_back(3);
				sum = 0;
				b = 0;
			}
		} else {
			if (sum == -2) {
				arr.push_back(2);
				sum = 0;
				b = 0;
			} else if (sum == +2) {
				arr.push_back(3);
				sum = +1;
				b = 1;
			}
		}

		look++;
	}

	for (int i = 1; i <= len - 1; i++) {
		guess += dp[i];
	}
	int index = len;
	for (int i = 0; i < arr.size(); i++) {
		if (arr[i] == 2) {
			guess += 1;
			index -= 2;
		} else {
			guess += (dp[index - 2] + 1);
			index -= 3;
		}
	}
	guess += 1;

	guess--;
	guess = (guess * 2) + parity;
	guess++;


	return guess;
}

Compilation message

Anna.cpp: In function 'std::pair<std::vector<int>, std::vector<int> > Anna(long long int)':
Anna.cpp:65:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |  for (int i = 0; i < arr.size(); i++) {
      |                  ~~^~~~~~~~~~~~
Anna.cpp:78:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |  for (int i = 0; i < s.size(); i++) {
      |                  ~~^~~~~~~~~~
Anna.cpp:83:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   83 |   for (int i = 0; i < s.size(); i++) {
      |                   ~~^~~~~~~~~~

Bruno.cpp: In function 'long long int Bruno(std::vector<int>)':
Bruno.cpp:84:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   84 |  for (int i = 0; i < arr.size(); i++) {
      |                  ~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 508 KB Output is correct
2 Correct 17 ms 800 KB Output is correct
3 Correct 21 ms 1020 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 508 KB Output is correct
2 Correct 17 ms 800 KB Output is correct
3 Correct 21 ms 1020 KB Output is correct
4 Correct 34 ms 1308 KB Output is correct
5 Correct 30 ms 1304 KB Output is correct
6 Correct 31 ms 1236 KB Output is correct
7 Correct 32 ms 1292 KB Output is correct
8 Correct 33 ms 1244 KB Output is correct
9 Correct 40 ms 1352 KB Output is correct
10 Correct 41 ms 1396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 508 KB Output is correct
2 Correct 17 ms 800 KB Output is correct
3 Correct 21 ms 1020 KB Output is correct
4 Correct 34 ms 1308 KB Output is correct
5 Correct 30 ms 1304 KB Output is correct
6 Correct 31 ms 1236 KB Output is correct
7 Correct 32 ms 1292 KB Output is correct
8 Correct 33 ms 1244 KB Output is correct
9 Correct 40 ms 1352 KB Output is correct
10 Correct 41 ms 1396 KB Output is correct
11 Correct 34 ms 1272 KB Output is correct
12 Correct 36 ms 1440 KB Output is correct
13 Correct 39 ms 1200 KB Output is correct
14 Correct 38 ms 1444 KB Output is correct
15 Correct 38 ms 1444 KB Output is correct
16 Correct 42 ms 1360 KB Output is correct
17 Correct 33 ms 1316 KB Output is correct
18 Correct 33 ms 1116 KB Output is correct
19 Correct 35 ms 1184 KB Output is correct
20 Correct 36 ms 1268 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 508 KB Output is correct
2 Correct 17 ms 800 KB Output is correct
3 Correct 21 ms 1020 KB Output is correct
4 Correct 34 ms 1308 KB Output is correct
5 Correct 30 ms 1304 KB Output is correct
6 Correct 31 ms 1236 KB Output is correct
7 Correct 32 ms 1292 KB Output is correct
8 Correct 33 ms 1244 KB Output is correct
9 Correct 40 ms 1352 KB Output is correct
10 Correct 41 ms 1396 KB Output is correct
11 Correct 34 ms 1272 KB Output is correct
12 Correct 36 ms 1440 KB Output is correct
13 Correct 39 ms 1200 KB Output is correct
14 Correct 38 ms 1444 KB Output is correct
15 Correct 38 ms 1444 KB Output is correct
16 Correct 42 ms 1360 KB Output is correct
17 Correct 33 ms 1316 KB Output is correct
18 Correct 33 ms 1116 KB Output is correct
19 Correct 35 ms 1184 KB Output is correct
20 Correct 36 ms 1268 KB Output is correct
21 Correct 41 ms 1356 KB Output is correct
22 Correct 48 ms 1500 KB Output is correct
23 Correct 42 ms 1384 KB Output is correct
24 Correct 44 ms 1372 KB Output is correct
25 Correct 38 ms 1420 KB Output is correct
26 Correct 44 ms 1484 KB Output is correct
27 Correct 45 ms 1520 KB Output is correct
28 Correct 38 ms 1292 KB Output is correct
29 Correct 39 ms 1312 KB Output is correct
30 Correct 37 ms 1412 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 508 KB Output is correct
2 Correct 17 ms 800 KB Output is correct
3 Correct 21 ms 1020 KB Output is correct
4 Correct 34 ms 1308 KB Output is correct
5 Correct 30 ms 1304 KB Output is correct
6 Correct 31 ms 1236 KB Output is correct
7 Correct 32 ms 1292 KB Output is correct
8 Correct 33 ms 1244 KB Output is correct
9 Correct 40 ms 1352 KB Output is correct
10 Correct 41 ms 1396 KB Output is correct
11 Correct 34 ms 1272 KB Output is correct
12 Correct 36 ms 1440 KB Output is correct
13 Correct 39 ms 1200 KB Output is correct
14 Correct 38 ms 1444 KB Output is correct
15 Correct 38 ms 1444 KB Output is correct
16 Correct 42 ms 1360 KB Output is correct
17 Correct 33 ms 1316 KB Output is correct
18 Correct 33 ms 1116 KB Output is correct
19 Correct 35 ms 1184 KB Output is correct
20 Correct 36 ms 1268 KB Output is correct
21 Correct 41 ms 1356 KB Output is correct
22 Correct 48 ms 1500 KB Output is correct
23 Correct 42 ms 1384 KB Output is correct
24 Correct 44 ms 1372 KB Output is correct
25 Correct 38 ms 1420 KB Output is correct
26 Correct 44 ms 1484 KB Output is correct
27 Correct 45 ms 1520 KB Output is correct
28 Correct 38 ms 1292 KB Output is correct
29 Correct 39 ms 1312 KB Output is correct
30 Correct 37 ms 1412 KB Output is correct
31 Correct 50 ms 1864 KB Output is correct
32 Correct 48 ms 1856 KB Output is correct
33 Correct 58 ms 1768 KB Output is correct
34 Correct 54 ms 1804 KB Output is correct
35 Correct 49 ms 1856 KB Output is correct
36 Correct 48 ms 2000 KB Output is correct
37 Correct 57 ms 1872 KB Output is correct
38 Correct 53 ms 1784 KB Output is correct
39 Correct 55 ms 1844 KB Output is correct
40 Correct 56 ms 1728 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 88 ms 2724 KB Output is correct
2 Correct 92 ms 2776 KB Output is correct
3 Correct 94 ms 2640 KB Output is correct
4 Correct 88 ms 2796 KB Output is correct
5 Correct 91 ms 2636 KB Output is correct
6 Correct 84 ms 2728 KB Output is correct
7 Correct 89 ms 2800 KB Output is correct
8 Correct 100 ms 2684 KB Output is correct
9 Correct 96 ms 2776 KB Output is correct
10 Correct 98 ms 2704 KB Output is correct
11 Correct 100 ms 2804 KB Output is correct
12 Correct 84 ms 2628 KB Output is correct
13 Correct 102 ms 2820 KB Output is correct
14 Correct 77 ms 2884 KB Output is correct
15 Correct 69 ms 2652 KB Output is correct
16 Correct 74 ms 2676 KB Output is correct
17 Correct 72 ms 2552 KB Output is correct
18 Correct 81 ms 2632 KB Output is correct
19 Correct 87 ms 2696 KB Output is correct
20 Correct 82 ms 2656 KB Output is correct