@@ -14,65 +14,42 @@ typedef set<int> si;
14
14
typedef vector<int > vi;
15
15
typedef vector<vi> vvi;
16
16
typedef vector<string> vs;
17
- bool operator <(vi c1, vi c2){
18
- return c1.front () < c1.back ();
19
- }
20
- vi height, bloom, wilt;
21
17
int done[55 ];
22
- int n;
23
- vi findChain (int i){
24
- vi res (1 , height[i]);
25
- done[i] = 1 ;
26
- for (int j = 0 ; j < n; j++){
27
- if (done[j] || height[j] <= height[i]) continue ;
28
- if (max (bloom[i], bloom[j]) <= min (wilt[i], wilt[j])){
29
- vi t = findChain (j);
30
- res.insert (res.end (), t.begin (), t.end ());
31
- }
32
- }
33
- return res;
34
- }
35
18
36
19
class FlowerGarden {
37
- public:
38
- vector <int > getOrdering (vector <int > _height, vector <int > _bloom, vector <int > _wilt){
39
- height = _height; bloom = _bloom; wilt = _wilt;
40
- n = height.size ();
41
- vvi r;
42
- fill (done, done+55 , 0 );
43
- for (int i = 0 ; i < n; i++)
44
- for (int j = i+1 ; j < n; j++)
45
- if (height[i] > height[j]){
46
- swap (height[i], height[j]);
47
- swap (bloom[i], bloom[j]);
48
- swap (wilt[i], wilt[j]);
49
- }
50
-
51
- for (int i = 0 ; i < n; i++){
52
- if (done[i]) continue ;
53
- vi t = findChain (i);
54
- r.push_back (t);
55
- }
56
-
57
- sort (r.rbegin (), r.rend ());
58
- vi res;
59
- for (vi a : r)
60
- for (int b : a) res.push_back (b);
61
- return res;
62
- }
20
+ public:
21
+ vector <int > getOrdering (vector <int > height, vector <int > bloom, vector <int > wilt) {
22
+ vi res;
23
+ fill (done, done+50 , 0 );
24
+ int n = bloom.size ();
25
+ for (int i = 0 ; i < n; i++){
26
+ int best = -1 ;
27
+ for (int j = 0 ; j < n; j++){
28
+ if (done[j]) continue ;
29
+ bool ok = true ;
30
+ for (int k = 0 ; k < n; k++){
31
+ if (!done[k] && (height[j] > height[k] && bloom[k] <= wilt[j] && bloom[j] <= wilt[k])) ok = false ;
32
+ }
33
+ if (ok && (best == -1 || (height[j] > height[best]))) best = j;
34
+ }
35
+ res.push_back (height[best]);
36
+ done[best] = 1 ;
37
+ }
38
+ return res;
39
+ }
63
40
64
41
// BEGIN CUT HERE
65
- public:
66
- void run_test (int Case) { if ((Case == -1 ) || (Case == 0 )) test_case_0 (); if ((Case == -1 ) || (Case == 1 )) test_case_1 (); if ((Case == -1 ) || (Case == 2 )) test_case_2 (); if ((Case == -1 ) || (Case == 3 )) test_case_3 (); if ((Case == -1 ) || (Case == 4 )) test_case_4 (); if ((Case == -1 ) || (Case == 5 )) test_case_5 (); }
67
- private:
68
- template <typename T> string print_array (const vector<T> &V) { ostringstream os; os << " { " ; for (typename vector<T>::const_iterator iter = V.begin (); iter != V.end (); ++iter) os << ' \" ' << *iter << " \" ," ; os << " }" ; return os.str (); }
69
- void verify_case (int Case, const vector <int > &Expected, const vector <int > &Received) { cerr << " Test Case #" << Case << " ..." ; if (Expected == Received) cerr << " PASSED" << endl; else { cerr << " FAILED" << endl; cerr << " \t Expected: " << print_array (Expected) << endl; cerr << " \t Received: " << print_array (Received) << endl; } }
70
- void test_case_0 () { int Arr0[] = {5 ,4 ,3 ,2 ,1 }; vector <int > Arg0 (Arr0, Arr0 + (sizeof (Arr0) / sizeof (Arr0[0 ]))); int Arr1[] = {1 ,1 ,1 ,1 ,1 }; vector <int > Arg1 (Arr1, Arr1 + (sizeof (Arr1) / sizeof (Arr1[0 ]))); int Arr2[] = {365 ,365 ,365 ,365 ,365 }; vector <int > Arg2 (Arr2, Arr2 + (sizeof (Arr2) / sizeof (Arr2[0 ]))); int Arr3[] = { 1 , 2 , 3 , 4 , 5 }; vector <int > Arg3 (Arr3, Arr3 + (sizeof (Arr3) / sizeof (Arr3[0 ]))); verify_case (0 , Arg3, getOrdering (Arg0, Arg1, Arg2)); }
71
- void test_case_1 () { int Arr0[] = {5 ,4 ,3 ,2 ,1 }; vector <int > Arg0 (Arr0, Arr0 + (sizeof (Arr0) / sizeof (Arr0[0 ]))); int Arr1[] = {1 ,5 ,10 ,15 ,20 }; vector <int > Arg1 (Arr1, Arr1 + (sizeof (Arr1) / sizeof (Arr1[0 ]))); int Arr2[] = {4 ,9 ,14 ,19 ,24 }; vector <int > Arg2 (Arr2, Arr2 + (sizeof (Arr2) / sizeof (Arr2[0 ]))); int Arr3[] = { 5 , 4 , 3 , 2 , 1 }; vector <int > Arg3 (Arr3, Arr3 + (sizeof (Arr3) / sizeof (Arr3[0 ]))); verify_case (1 , Arg3, getOrdering (Arg0, Arg1, Arg2)); }
72
- void test_case_2 () { int Arr0[] = {5 ,4 ,3 ,2 ,1 }; vector <int > Arg0 (Arr0, Arr0 + (sizeof (Arr0) / sizeof (Arr0[0 ]))); int Arr1[] = {1 ,5 ,10 ,15 ,20 }; vector <int > Arg1 (Arr1, Arr1 + (sizeof (Arr1) / sizeof (Arr1[0 ]))); int Arr2[] = {5 ,10 ,15 ,20 ,25 }; vector <int > Arg2 (Arr2, Arr2 + (sizeof (Arr2) / sizeof (Arr2[0 ]))); int Arr3[] = { 1 , 2 , 3 , 4 , 5 }; vector <int > Arg3 (Arr3, Arr3 + (sizeof (Arr3) / sizeof (Arr3[0 ]))); verify_case (2 , Arg3, getOrdering (Arg0, Arg1, Arg2)); }
73
- void test_case_3 () { int Arr0[] = {5 ,4 ,3 ,2 ,1 }; vector <int > Arg0 (Arr0, Arr0 + (sizeof (Arr0) / sizeof (Arr0[0 ]))); int Arr1[] = {1 ,5 ,10 ,15 ,20 }; vector <int > Arg1 (Arr1, Arr1 + (sizeof (Arr1) / sizeof (Arr1[0 ]))); int Arr2[] = {5 ,10 ,14 ,20 ,25 }; vector <int > Arg2 (Arr2, Arr2 + (sizeof (Arr2) / sizeof (Arr2[0 ]))); int Arr3[] = { 3 , 4 , 5 , 1 , 2 }; vector <int > Arg3 (Arr3, Arr3 + (sizeof (Arr3) / sizeof (Arr3[0 ]))); verify_case (3 , Arg3, getOrdering (Arg0, Arg1, Arg2)); }
74
- void test_case_4 () { int Arr0[] = {1 ,2 ,3 ,4 ,5 ,6 }; vector <int > Arg0 (Arr0, Arr0 + (sizeof (Arr0) / sizeof (Arr0[0 ]))); int Arr1[] = {1 ,3 ,1 ,3 ,1 ,3 }; vector <int > Arg1 (Arr1, Arr1 + (sizeof (Arr1) / sizeof (Arr1[0 ]))); int Arr2[] = {2 ,4 ,2 ,4 ,2 ,4 }; vector <int > Arg2 (Arr2, Arr2 + (sizeof (Arr2) / sizeof (Arr2[0 ]))); int Arr3[] = { 2 , 4 , 6 , 1 , 3 , 5 }; vector <int > Arg3 (Arr3, Arr3 + (sizeof (Arr3) / sizeof (Arr3[0 ]))); verify_case (4 , Arg3, getOrdering (Arg0, Arg1, Arg2)); }
75
- void test_case_5 () { int Arr0[] = {3 ,2 ,5 ,4 }; vector <int > Arg0 (Arr0, Arr0 + (sizeof (Arr0) / sizeof (Arr0[0 ]))); int Arr1[] = {1 ,2 ,11 ,10 }; vector <int > Arg1 (Arr1, Arr1 + (sizeof (Arr1) / sizeof (Arr1[0 ]))); int Arr2[] = {4 ,3 ,12 ,13 }; vector <int > Arg2 (Arr2, Arr2 + (sizeof (Arr2) / sizeof (Arr2[0 ]))); int Arr3[] = { 4 , 5 , 2 , 3 }; vector <int > Arg3 (Arr3, Arr3 + (sizeof (Arr3) / sizeof (Arr3[0 ]))); verify_case (5 , Arg3, getOrdering (Arg0, Arg1, Arg2)); }
42
+ public:
43
+ void run_test (int Case) { if ((Case == -1 ) || (Case == 0 )) test_case_0 (); if ((Case == -1 ) || (Case == 1 )) test_case_1 (); if ((Case == -1 ) || (Case == 2 )) test_case_2 (); if ((Case == -1 ) || (Case == 3 )) test_case_3 (); if ((Case == -1 ) || (Case == 4 )) test_case_4 (); if ((Case == -1 ) || (Case == 5 )) test_case_5 (); }
44
+ private:
45
+ template <typename T> string print_array (const vector<T> &V) { ostringstream os; os << " { " ; for (typename vector<T>::const_iterator iter = V.begin (); iter != V.end (); ++iter) os << ' \" ' << *iter << " \" ," ; os << " }" ; return os.str (); }
46
+ void verify_case (int Case, const vector <int > &Expected, const vector <int > &Received) { cerr << " Test Case #" << Case << " ..." ; if (Expected == Received) cerr << " PASSED" << endl; else { cerr << " FAILED" << endl; cerr << " \t Expected: " << print_array (Expected) << endl; cerr << " \t Received: " << print_array (Received) << endl; } }
47
+ void test_case_0 () { int Arr0[] = {5 ,4 ,3 ,2 ,1 }; vector <int > Arg0 (Arr0, Arr0 + (sizeof (Arr0) / sizeof (Arr0[0 ]))); int Arr1[] = {1 ,1 ,1 ,1 ,1 }; vector <int > Arg1 (Arr1, Arr1 + (sizeof (Arr1) / sizeof (Arr1[0 ]))); int Arr2[] = {365 ,365 ,365 ,365 ,365 }; vector <int > Arg2 (Arr2, Arr2 + (sizeof (Arr2) / sizeof (Arr2[0 ]))); int Arr3[] = { 1 , 2 , 3 , 4 , 5 }; vector <int > Arg3 (Arr3, Arr3 + (sizeof (Arr3) / sizeof (Arr3[0 ]))); verify_case (0 , Arg3, getOrdering (Arg0, Arg1, Arg2)); }
48
+ void test_case_1 () { int Arr0[] = {5 ,4 ,3 ,2 ,1 }; vector <int > Arg0 (Arr0, Arr0 + (sizeof (Arr0) / sizeof (Arr0[0 ]))); int Arr1[] = {1 ,5 ,10 ,15 ,20 }; vector <int > Arg1 (Arr1, Arr1 + (sizeof (Arr1) / sizeof (Arr1[0 ]))); int Arr2[] = {4 ,9 ,14 ,19 ,24 }; vector <int > Arg2 (Arr2, Arr2 + (sizeof (Arr2) / sizeof (Arr2[0 ]))); int Arr3[] = { 5 , 4 , 3 , 2 , 1 }; vector <int > Arg3 (Arr3, Arr3 + (sizeof (Arr3) / sizeof (Arr3[0 ]))); verify_case (1 , Arg3, getOrdering (Arg0, Arg1, Arg2)); }
49
+ void test_case_2 () { int Arr0[] = {5 ,4 ,3 ,2 ,1 }; vector <int > Arg0 (Arr0, Arr0 + (sizeof (Arr0) / sizeof (Arr0[0 ]))); int Arr1[] = {1 ,5 ,10 ,15 ,20 }; vector <int > Arg1 (Arr1, Arr1 + (sizeof (Arr1) / sizeof (Arr1[0 ]))); int Arr2[] = {5 ,10 ,15 ,20 ,25 }; vector <int > Arg2 (Arr2, Arr2 + (sizeof (Arr2) / sizeof (Arr2[0 ]))); int Arr3[] = { 1 , 2 , 3 , 4 , 5 }; vector <int > Arg3 (Arr3, Arr3 + (sizeof (Arr3) / sizeof (Arr3[0 ]))); verify_case (2 , Arg3, getOrdering (Arg0, Arg1, Arg2)); }
50
+ void test_case_3 () { int Arr0[] = {5 ,4 ,3 ,2 ,1 }; vector <int > Arg0 (Arr0, Arr0 + (sizeof (Arr0) / sizeof (Arr0[0 ]))); int Arr1[] = {1 ,5 ,10 ,15 ,20 }; vector <int > Arg1 (Arr1, Arr1 + (sizeof (Arr1) / sizeof (Arr1[0 ]))); int Arr2[] = {5 ,10 ,14 ,20 ,25 }; vector <int > Arg2 (Arr2, Arr2 + (sizeof (Arr2) / sizeof (Arr2[0 ]))); int Arr3[] = { 3 , 4 , 5 , 1 , 2 }; vector <int > Arg3 (Arr3, Arr3 + (sizeof (Arr3) / sizeof (Arr3[0 ]))); verify_case (3 , Arg3, getOrdering (Arg0, Arg1, Arg2)); }
51
+ void test_case_4 () { int Arr0[] = {1 ,2 ,3 ,4 ,5 ,6 }; vector <int > Arg0 (Arr0, Arr0 + (sizeof (Arr0) / sizeof (Arr0[0 ]))); int Arr1[] = {1 ,3 ,1 ,3 ,1 ,3 }; vector <int > Arg1 (Arr1, Arr1 + (sizeof (Arr1) / sizeof (Arr1[0 ]))); int Arr2[] = {2 ,4 ,2 ,4 ,2 ,4 }; vector <int > Arg2 (Arr2, Arr2 + (sizeof (Arr2) / sizeof (Arr2[0 ]))); int Arr3[] = { 2 , 4 , 6 , 1 , 3 , 5 }; vector <int > Arg3 (Arr3, Arr3 + (sizeof (Arr3) / sizeof (Arr3[0 ]))); verify_case (4 , Arg3, getOrdering (Arg0, Arg1, Arg2)); }
52
+ void test_case_5 () { int Arr0[] = {3 ,2 ,5 ,4 }; vector <int > Arg0 (Arr0, Arr0 + (sizeof (Arr0) / sizeof (Arr0[0 ]))); int Arr1[] = {1 ,2 ,11 ,10 }; vector <int > Arg1 (Arr1, Arr1 + (sizeof (Arr1) / sizeof (Arr1[0 ]))); int Arr2[] = {4 ,3 ,12 ,13 }; vector <int > Arg2 (Arr2, Arr2 + (sizeof (Arr2) / sizeof (Arr2[0 ]))); int Arr3[] = { 4 , 5 , 2 , 3 }; vector <int > Arg3 (Arr3, Arr3 + (sizeof (Arr3) / sizeof (Arr3[0 ]))); verify_case (5 , Arg3, getOrdering (Arg0, Arg1, Arg2)); }
76
53
77
54
// END CUT HERE
78
55
0 commit comments