50013. Bingo

難度:3.5/5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>
#include "bingo.h"
#define ull unsigned long long

void print(const ull *board) {
for(int i = 7; i >= 0; i--){
for(int j = 7; j >= 0; j--){
printf("%llu", (*board) >> (i * 8 + j) & 1);
}
puts("");
}
}

int check_row(const ull *board){
ull mask = (ull)0xFF00000000000000;
for(int i = 0; i < 8; i++){
if(((*board) & mask) == mask) return i;
else mask >>= 8;
}
return -1;
}

int check_col(const ull *board){
ull mask = (ull)0x8080808080808080;
for(int i = 0; i < 8; i++){
if(((*board) & mask) == mask) return i;
else mask >>= 1;
}
return -1;
}

int check_dig(const ull *board){
ull mask_1 = (ull)0x8040201008040201;
ull mask_2 = (ull)0x0102040810204080;
if(((*board) & mask_1) == mask_1) return 0;
if(((*board) & mask_2) == mask_2) return 1;
return -1;
}

int bingo(const ull *board, int *rowColumn){
int rev_1 = check_row(board);
int rev_2 = check_col(board);
int rev_3 = check_dig(board);

if(rev_1 != -1){
*rowColumn = rev_1;
return 1;
}
else if(rev_2 != -1){
*rowColumn = rev_2;
return 2;
}
else if(rev_3 != -1){
*rowColumn = rev_3;
return 3;
}
else{
return 0;
}
}

50013. Bingo
https://aaronlin1229.github.io/judgegirl_50013/
Author
Akizumi
Posted on
July 17, 2023
Licensed under