首页 > 代码库 > AOJ 0033 Ball 题解 《挑战程序设计竞赛》

AOJ 0033 Ball 题解 《挑战程序设计竞赛》

题目:Aizu - 0033 

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

 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 
 7 int n;
 8 int ball[10]; 
 9 vector<int> l;
10 vector<int> r;
11 
12 bool solve() {
13     bool res = false;
14     for (int i = 0; i < 1024; i++) {
15         for (int j = 0; j < 10; j++) {
16             if (i & (1 << j)) {
17                 l.push_back(ball[j]);
18             }
19             else {
20                 r.push_back(ball[j]);
21             }
22         }
23         int lLen = l.size();
24         int rLen = r.size();
25         bool lOK = true;
26         bool rOK = true;        
27         for (int j = 0; j < lLen - 1; j++) {
28             if (l.at(j) > l.at(j + 1)) {
29                 lOK = false;
30                 break;
31             }
32         }
33         for (int j = 0; j < rLen - 1; j++) {
34             if (r.at(j) > r.at(j + 1)) {
35                 rOK = false;
36                 break;
37             }
38         }
39         if (lOK && rOK) {
40             res = true;
41             break;
42         }
43         l.clear();
44         r.clear();        
45     }
46     return res;
47 }
48 
49 int main() {
50     cin >> n;
51     for (int i = 0; i < n; i++) {
52         for (int j = 0; j < 10; j++) {
53             cin >> ball[j];
54         }        
55         if (solve()) {
56             cout << "YES" << endl;
57         } 
58         else {
59             cout << "NO" << endl;
60         }
61     }
62     return 0;
63 }

 

AOJ 0033 Ball 题解 《挑战程序设计竞赛》