Skip to content

Commit d48384b

Browse files
committed
tco 15 250
1 parent ebca65a commit d48384b

File tree

2 files changed

+124
-0
lines changed

2 files changed

+124
-0
lines changed

DevuAndPlantingTrees.cpp

+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
#include <iostream>
2+
#include <sstream>
3+
#include <vector>
4+
#include <algorithm>
5+
#include <set>
6+
#include <map>
7+
#include <queue>
8+
#include <cstring>
9+
#include <climits>
10+
#include <cstdio>
11+
using namespace std;
12+
typedef pair<int,int> pi;
13+
typedef set<int> si;
14+
typedef vector<int> vi;
15+
typedef vector<vi> vvi;
16+
typedef vector<string> vs;
17+
typedef long long ll;
18+
#define sz size()
19+
#define mp make_pair
20+
#define pb push_back
21+
#define ri(a, b) for(int i=((int)(a)); i < ((int)(b)); i++) // i -> [a, b)
22+
#define rie(a, b) for(int i=((int)(a)); i <= ((int)(b)); i++) // i -> [a, b]
23+
#define rj(a, b) for(int j=((int)(a)); j < ((int)(b)); j++) // j -> [a, b)
24+
#define rje(a, b) for(int j=((int)(a)); j <= ((int)(b)); j++) // j -> [a, b]
25+
#define rk(a, b) for(int k=((int)(a)); k < ((int)(b)); k++) // k -> [a, b)
26+
#define rke(a, b) for(int k=((int)(a)); k <= ((int)(b)); k++) // k -> [a, b]
27+
#define fi(b) for(int i=0; i < ((int)(b)); i++) // i -> [0, b)
28+
#define fie(b) for(int i=0; i <= ((int)(b)); i++) // i -> [0, b]
29+
#define fj(b) for(int j=0; j < ((int)(b)); j++) // j -> [0, b)
30+
#define fje(b) for(int j=0; j <= ((int)(b)); j++) // j -> [0, b]
31+
#define fk(b) for(int k=0; k < ((int)(b)); k++) // k -> [0, b)
32+
#define fke(b) for(int k=0; k < ((int)(b)); k++) // k -> [0, b]
33+
#define fle(b) for(int l=0; l <= ((int)(b)); l++) // l -> [0, b]
34+
int n;
35+
#define valid(x, y) ( 0 <= (x) && (x) < 2 && 0 <= (y) && (y) < n )
36+
int A[8] = {1, -1, 0, 0, 1, -1, -1, 1};
37+
int B[8] = {0, 0, 1, -1, -1, 1, -1, 1};
38+
39+
class DevuAndPlantingTrees{
40+
41+
public:
42+
int maximumTreesDevuCanGrow(vector <string> garden){
43+
44+
n = garden[0].size();
45+
vs temp = garden;
46+
for(int i = 0; i < 2; i++)
47+
for(int j = 0; j < n; j++){
48+
if(garden[i][j] != '*') continue;
49+
fk(8){
50+
int ii = i + A[k], jj = j + B[k];
51+
if(valid(ii, jj) && garden[ii][jj] == '.') garden[ii][jj] = 'x';
52+
}
53+
}
54+
fi(2){
55+
fj(n) cout<<garden[i][j];
56+
cout<<endl;
57+
}
58+
fi(2) fj(n) {
59+
if(garden[i][j] != '.') continue;
60+
garden[i][j] = '*';
61+
fk(8){
62+
int ii = i + A[k], jj = j + B[k];
63+
if(valid(ii, jj) && garden[ii][jj] == '.') garden[ii][jj] = 'x';
64+
}
65+
}
66+
int c = 0;
67+
fi(2) fj(n) if(garden[i][j] == '*') c++;
68+
return c;
69+
}
70+
71+
// BEGIN CUT HERE
72+
public:
73+
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(); }
74+
private:
75+
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(); }
76+
void verify_case(int Case, const int &Expected, const int &Received) { cerr << "Test Case #" << Case << "..."; if (Expected == Received) cerr << "PASSED" << endl; else { cerr << "FAILED" << endl; cerr << "\tExpected: \"" << Expected << '\"' << endl; cerr << "\tReceived: \"" << Received << '\"' << endl; } }
77+
void test_case_0() { string Arr0[] = {"..", ".."}; vector <string> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arg1 = 1; verify_case(0, Arg1, maximumTreesDevuCanGrow(Arg0)); }
78+
void test_case_1() { string Arr0[] = {"..", ".*"}; vector <string> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arg1 = 1; verify_case(1, Arg1, maximumTreesDevuCanGrow(Arg0)); }
79+
void test_case_2() { string Arr0[] = {"...",
80+
"..*"}; vector <string> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arg1 = 2; verify_case(2, Arg1, maximumTreesDevuCanGrow(Arg0)); }
81+
void test_case_3() { string Arr0[] = {".....*..........",
82+
".*.......*.*..*."}; vector <string> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arg1 = 7; verify_case(3, Arg1, maximumTreesDevuCanGrow(Arg0)); }
83+
void test_case_4() { string Arr0[] = {"....*.*.*...........*........",
84+
"*..........*..*.*.*....*...*."}; vector <string> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arg1 = 13; verify_case(4, Arg1, maximumTreesDevuCanGrow(Arg0)); }
85+
void test_case_5() { string Arr0[] = {".....*..*..........*............................*",
86+
"*..*.............*...*.*.*.*..*.....*.*...*...*.."}; vector <string> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arg1 = 23; verify_case(5, Arg1, maximumTreesDevuCanGrow(Arg0)); }
87+
88+
// END CUT HERE
89+
90+
};
91+
92+
// BEGIN CUT HERE
93+
int main()
94+
{
95+
DevuAndPlantingTrees ___test;
96+
___test.run_test(-1);
97+
}
98+
// END CUT HERE

DevuAndPlantingTrees.html

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<html><body bgcolor="#000000" text="#ffffff"><table><tr><td colspan="2"><h3>Problem Statement</h3></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><p>
2+
Devu has a garden in his back yard.
3+
The garden can be seen as a grid with 2 rows and N columns.
4+
You are given a description of the garden: a vector &lt;string&gt; <b>garden</b> with 2 elements, each containing N characters.
5+
The character '.' represents an empty grid cell, and the character '*' a cell that contains a tree.
6+
</p>
7+
8+
<p></p>
9+
10+
<p>
11+
Two cells are considered adjacent if they share a side or a corner.
12+
As you may know, whenever two trees grow in adjacent cells, they hinder each other's growth.
13+
Therefore, Devu would never plant a tree into a cell that is already adjacent to a cell with a tree.
14+
(This is also true for all the trees already present in his garden.)
15+
</p>
16+
17+
<p></p>
18+
19+
<p>
20+
Given the above rule, Devu wants to plant as many additional trees as possible.
21+
Return the largest possible number of trees Devu can have in his garden at the end.
22+
</p></td></tr><tr><td colspan="2"><h3>Definition</h3></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td>Class:</td><td>DevuAndPlantingTrees</td></tr><tr><td>Method:</td><td>maximumTreesDevuCanGrow</td></tr><tr><td>Parameters:</td><td>vector &lt;string&gt;</td></tr><tr><td>Returns:</td><td>int</td></tr><tr><td>Method signature:</td><td>int maximumTreesDevuCanGrow(vector &lt;string&gt; garden)</td></tr><tr><td colspan="2">(be sure your method is public)</td></tr></table></td></tr><tr><td colspan="2"><h3>Limits</h3></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td>Time limit (s):</td><td>2.000</td></tr><tr><td>Memory limit (MB):</td><td>256</td></tr><tr><td>Stack limit (MB):</td><td>256</td></tr></table></td></tr><tr><td colspan="2"><h3>Constraints</h3></td></tr><tr><td align="center" valign="top">-</td><td>N will be between 1 and 50, inclusive.</td></tr><tr><td align="center" valign="top">-</td><td><b>garden</b> will contain exactly 2 elements.</td></tr><tr><td align="center" valign="top">-</td><td>Each element of <b>garden</b> will contain exactly N characters.</td></tr><tr><td align="center" valign="top">-</td><td>Each character of each element of <b>garden</b> will be either '.' or '*'.</td></tr><tr><td align="center" valign="top">-</td><td>No two of the already planted trees are in adjacent cells.</td></tr><tr><td colspan="2"><h3>Examples</h3></td></tr><tr><td align="center" nowrap="true">0)</td><td></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td><table><tr><td><pre>{&quot;..&quot;, &quot;..&quot;}</pre></td></tr></table></td></tr><tr><td><pre>Returns: 1</pre></td></tr><tr><td><table><tr><td colspan="2">You can plant a single tree in either of the four available cells.</td></tr></table></td></tr></table></td></tr><tr><td align="center" nowrap="true">1)</td><td></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td><table><tr><td><pre>{&quot;..&quot;, &quot;.*&quot;}</pre></td></tr></table></td></tr><tr><td><pre>Returns: 1</pre></td></tr><tr><td><table><tr><td colspan="2">You cannot plant any additional trees.</td></tr></table></td></tr></table></td></tr><tr><td align="center" nowrap="true">2)</td><td></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td><table><tr><td><pre>{&quot;...&quot;,
23+
&quot;..*&quot;}</pre></td></tr></table></td></tr><tr><td><pre>Returns: 2</pre></td></tr><tr><td><table><tr><td colspan="2">The garden already contains one tree in a corner. One optimal solution is to plant one additional tree in the opposite corner.</td></tr></table></td></tr></table></td></tr><tr><td align="center" nowrap="true">3)</td><td></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td><table><tr><td><pre>{&quot;.....*..........&quot;,
24+
&quot;.*.......*.*..*.&quot;}</pre></td></tr></table></td></tr><tr><td><pre>Returns: 7</pre></td></tr><tr><td><table><tr><td colspan="2"></td></tr></table></td></tr></table></td></tr><tr><td align="center" nowrap="true">4)</td><td></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td><table><tr><td><pre>{&quot;....*.*.*...........*........&quot;,
25+
&quot;*..........*..*.*.*....*...*.&quot;}</pre></td></tr></table></td></tr><tr><td><pre>Returns: 13</pre></td></tr><tr><td><table><tr><td colspan="2"></td></tr></table></td></tr></table></td></tr><tr><td align="center" nowrap="true">5)</td><td></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td><table><tr><td><pre>{&quot;.....*..*..........*............................*&quot;,
26+
&quot;*..*.............*...*.*.*.*..*.....*.*...*...*..&quot;}</pre></td></tr></table></td></tr><tr><td><pre>Returns: 23</pre></td></tr><tr><td><table><tr><td colspan="2"></td></tr></table></td></tr></table></td></tr></table><p>This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved. </p></body></html>

0 commit comments

Comments
 (0)