aoj 0033 ball 题解

AOJ 0033 Ball

思路:二进制枚举,用了昨天学到的2^N以及与运算方法枚举。

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
61
62
63

#include <vector>
#include <algorithm>

using namespace std;

int n;
int ball[10];
vector<int> l;
vector<int> r;

bool () {
bool res = false;
for (int i = 0; i < 1024; i++) {
for (int j = 0; j < 10; j++) {
if (i & (1 << j)) {
l.push_back(ball[j]);
}
else {
r.push_back(ball[j]);
}
}
int lLen = l.size();
int rLen = r.size();
bool lOK = true;
bool rOK = true;
for (int j = 0; j < lLen - 1; j++) {
if (l.at(j) > l.at(j + 1)) {
lOK = false;
break;
}
}
for (int j = 0; j < rLen - 1; j++) {
if (r.at(j) > r.at(j + 1)) {
rOK = false;
break;
}
}
if (lOK && rOK) {
res = true;
break;
}
l.clear();
r.clear();
}
return res;
}

int main() {
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < 10; j++) {
cin >> ball[j];
}
if (solve()) {
cout << "YES" << endl;
}
else {
cout << "NO" << endl;
}
}
return 0;
}