题目
思路
题目说是要用位运算,但搞了一下午还是不会用位运算来解决,所以直接用暴力循环了,因为本身这个题的数据范围不是很大,循环1000次都才104.
AC代码
#include <bits/stdc++.h>
using namespace std;
int arr[20];
int main() {
while (true) {
bool flag = true;
for (int i = 1; i <= 10; ++i) {
scanf("%d", &arr[i]);
if (arr[i] == -1)
return 0;
}
for (int i = 1; i <= 10; i += 2) {
if (arr[i] == 0) {
if (arr[i + 1] == 2 || arr[i + 1] == 3 || arr[i + 1] == 4 || arr[i + 1] == 5 || arr[i + 1] == 6 || arr[i + 1] == 9) {
flag = false;
break;
}
} else if (arr[i] == 1) {
if (arr[i + 1] == 2 || arr[i + 1] == 5 || arr[i + 1] == 6) {
flag = false;
break;
}
} else if (arr[i] == 2) {
if (!(arr[i + 1] == 8)) {
flag = false;
break;
}
} else if (arr[i] == 3) {
if (arr[i + 1] == 0 || arr[i + 1] == 2 || arr[i + 1] == 4 || arr[i + 1] == 5 || arr[i + 1] == 6) {
flag = false;
break;
}
} else if (arr[i] == 4) {
if (!(arr[i + 1] == 1)) {
flag = false;
break;
}
} else if (arr[i] == 5) {
if (arr[i + 1] == 0 || arr[i + 1] == 1 || arr[i + 1] == 2 || arr[i + 1] == 3 || arr[i + 1] == 4 || arr[i + 1] == 7) {
flag = false;
break;
}
} else if (arr[i] == 6) {
if (arr[i + 1] == 0 || arr[i + 1] == 1 || arr[i + 1] == 2 || arr[i + 1] == 3 || arr[i + 1] == 4 || arr[i + 1] == 7
|| arr[i + 1] == 9) {
flag = false;
break;
}
} else if (arr[i] == 7) {
if (arr[i + 1] == 2 || arr[i + 1] == 4 || arr[i + 1] == 5 || arr[i + 1] == 6) {
flag = false;
break;
}
} else if (arr[i] == 8) {
if (arr[i + 1] == 4) {
flag = false;
break;
}
} else {
if (arr[i + 1] == 0 || arr[i + 1] == 2 || arr[i + 1] == 4 || arr[i + 1] == 6) {
flag = false;
break;
}
}
}
if (flag)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
}