답안 #26864

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
26864 2017-07-06T12:23:48 Z grands 비교 (balkan11_cmp) C++14
100 / 100
2978 ms 91000 KB
#include "cmp.h"
//4+3+3=10
void remember(int n) {
	int loc[4] = { 1, 1 + 4096, 1 + 4096 + 64, 1 + 4096 + 64 + 8 };
	int mask[4] = { 07777, 07700, 07000, 00070 };
	int shift[4] = { 0, 6, 9, 3 };
	for (int i = 0; i < 4; i++){
		bit_set(((n&mask[i]) >> shift[i]) + loc[i]);
	}
}
int compare(int b) {
	//일치하는 경우 제외
	int loc[4] = { 1, 1 + 4096, 1 + 4096 + 64, 1 + 4096 + 64 + 8 };
	int mask[4] = { 07777, 07700, 07000, 00070 };
	int shift[4] = { 0, 6, 9, 3 };
	int idx = 0;
	if (bit_get(((b&mask[idx]) >> shift[idx]) + loc[idx]))
		return 0;
	//일치함 따라서 뒤 6비트 봐야함
	idx++;
	if (bit_get(((b&mask[idx]) >> shift[idx]) + loc[idx])){
		int p = b % 64;
		//일치함 뒤 3비트로 확인해야함 3번 구간
		idx += 2;
		if (bit_get(((b&mask[idx]) >> shift[idx]) + loc[idx])){
			idx = 0;
			int m1 = 00007;
			int m2 = 07770;
			int q = (b&m1) >> shift[idx];
			int w = b&(m2);
			if (q < 4){
				//0 1 2
				for (int i = 0; i < q; i++){
					int now = w + (i << shift[idx]);
					if (bit_get(loc[idx] + now))
						return 1;
				}
				return -1;
			}
			else{
				//5 6 7
				for (int i = q + 1; i < 8; i++){
					int now = w + (i << shift[idx]);
					if (bit_get(loc[idx] + now))
						return -1;
				}
				return 1;
			}
		}
		//불일치함 앞 3비트로 확인해야함 2번 구간
		else{
			idx = 3;
			int m1 = 00070;
			int m2 = 07707;
			int q = (b&m1) >> shift[idx];
			int w = b&(m2);
			if (q < 4){
				//0 1 2
				for (int i = 0; i < q; i++){
					int now = i;
					if (bit_get(loc[idx] + now))
						return 1;
				}
				return -1;
			}
			else{
				//5 6 7
				for (int i = q + 1; i < 8; i++){
					int now = i;
					if (bit_get(loc[idx] + now))
						return -1;
				}
				return 1;
			}
		}
	}
	//불일치함 따라서 앞 6비트 봐야함
	else{
		//일치함 뒤 3비트로 확인해야함 1번 구간
		idx++;
		if (bit_get(((b&mask[idx]) >> shift[idx]) + loc[idx])){
			idx = 1;
			int m1 = 00700;
			int m2 = 07077;
			int q = (b&m1) >> shift[idx];
			int w = b&(m2);
			if (q < 4){
				//0 1 2
				for (int i = 0; i < q; i++){
					int now = (w >> shift[idx]) + i;
					if (bit_get(loc[idx] + now))
						return 1;
				}
				return -1;
			}
			else{
				//5 6 7
				for (int i = q + 1; i < 8; i++){
					int now = (w >> shift[idx]) + i;
					if (bit_get(loc[idx] + now))
						return -1;
				}
				return 1;
			}
		}
		//불일치함 앞 3비트로 확인해야함 0번 구간
		else{
			idx = 2;
			int m1 = 07000;
			int m2 = 00777;
			int q = (b&m1) >> shift[idx];
			int w = b&(m2);
			if (q < 4){
				//0 1 2
				for (int i = 0; i < q; i++){
					int now = i;
					if (bit_get(loc[idx] + now))
						return 1;
				}
				return -1;
			}
			else{
				//5 6 7
				for (int i = q + 1; i < 8; i++){
					int now = i;
					if (bit_get(loc[idx] + now))
						return -1;
				}
				return 1;
			}
		}
	}
}

//
//int compare(int b) {
//	//일치하는 경우 제외
// 
//	//일치함 따라서 뒤 6비트 봐야함
//	if (bit_get(ri - k)){
//		 
//		//일치함 뒤 3비트로 확인해야함 3번 구간
//		if (bit_get(ri - p / 8)){
//			if (q<4){
//				//0 1 2
//				 
//			}
//			else{
//				//5 6 7
//				 
//			}
//		}
//		//불일치함 앞 3비트로 확인해야함 2번 구간
//		else{
//		 
//			if (q<4){
//				//0 1 2
//				 
//			}
//			else{
//				//5 6 7
//				 
//			}
//		}
//	}
//	//불일치함 따라서 앞 6비트 봐야함
//	else{
//		//일치함 뒤 3비트로 확인해야함 1번 구간
//		if (bit_get(ri - p / 8)){
//			 {
//				//0 1 2
//				 
//			}
//			else{
//				//5 6 7
//			 
//			}
//		}
//		//불일치함 앞 3비트로 확인해야함 0번 구간
//		else{
//		 
//			if (q<4){
//				//0 1 2
//			 
//			}
//			else{
//				//5 6 7
//				 
//			}
//		}
//	}
//}

Compilation message

cmp.cpp: In function 'int compare(int)':
cmp.cpp:56:8: warning: unused variable 'w' [-Wunused-variable]
    int w = b&(m2);
        ^
cmp.cpp:22:7: warning: unused variable 'p' [-Wunused-variable]
   int p = b % 64;
       ^
cmp.cpp:112:8: warning: unused variable 'w' [-Wunused-variable]
    int w = b&(m2);
        ^
# 결과 실행 시간 메모리 Grader output
1 Correct 2978 ms 91000 KB Output is correct - maxAccess = 10, score = 100