Submission #578184

# Submission time Handle Problem Language Result Execution time Memory
578184 2022-06-16T07:32:05 Z 8e7 Flight to the Ford (BOI22_communication) C++17
0 / 100
3 ms 200 KB
#include"communication.h"
//
// --- Sample implementation for the task communication ---
//
// To compile this program with the sample grader, place:
//     communication.h communication_sample.cpp sample_grader.cpp
// in a single folder, then open the terminal in this directory (right-click onto an empty spot in the directory,
// left click on "Open in terminal") and enter e.g.:
//     g++ -std=c++17 communication_sample.cpp sample_grader.cpp
// in this folder. This will create a file a.out in the current directory which you can execute from the terminal
// as ./a.out
// See task statement or sample_grader.cpp for the input specification
//
unsigned nxt(int p) {
	return (p + 7) % 16;
}
void encode(int N, int X) {
	unsigned mask = 0;
	int low = 0, up = N + 1;	
	while (up - low > 1) {
		int m = (low + up) / 2;
		if (X >= m) { //negative num
			bool ok = 0;
			do {
				int sum = 0, p;
				for (int i = 0;i < 4;i++) {
					if (mask & (1<<i)) {
						p = send(0);
						sum += (p ? 1 : -1);
					}else {
						p = send(1);
						sum += (p ? -1 : 1);
					}
				}
				mask = nxt(mask);
				if (sum < 0) {
					ok = 1;	
				} 
			} while (ok);
			low = m;
		} else {
			bool ok = 0;
			do {
				int sum = 0, p;
				for (int i = 0;i < 4;i++) {
					if (mask & (1<<i)) {
						p = send(1);
						sum += (p ? 1 : -1);
					}else {
						p = send(0);
						sum += (p ? -1 : 1);
					}
				}
				mask = nxt(mask);
				if (sum > 0) {
					ok = 1;	
				} 
			} while (ok);
			up = m;
		}
	}
}

std::pair<int, int> decode(int N) {
	unsigned mask = 0;
	int low = 0, up = N + 1;	
	while (up - low > 1) {
		int m = (low + up) / 2;
		bool ok = 1;
		do {
			int sum = 0, p;
			for (int i = 0;i < 4;i++) {
				if (mask & (1<<i)) {
					p = send(0);
					sum += (p ? 1 : -1);
				}else {
					p = send(1);
					sum += (p ? -1 : 1);
				}
			}
			mask = nxt(mask);
			if (sum != 0) {
				if (sum < 0) low = m;
				else up = m;
				ok = 1;	
			} 
		} while (ok);
	}
	
    return {N, low};
}
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 200 KB Not correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 200 KB Not correct
2 Halted 0 ms 0 KB -