#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 |