File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ #include < stdio.h>
2+ #include < vector>
3+ #include < string>
4+ #include < vector>
5+ #include < list>
6+ #include < map>
7+ #include < set>
8+ #include < queue>
9+ #include < deque>
10+ #include < stack>
11+ #include < bitset>
12+ #include < algorithm>
13+ #include < functional>
14+ #include < numeric>
15+ #include < utility>
16+ #include < sstream>
17+ #include < iostream>
18+ #include < iomanip>
19+ #include < cstdio>
20+ #include < cmath>
21+ #include < cstdlib>
22+ #include < ctime>
23+
24+ using namespace std ;
25+
26+ // 有一块矩形土地被划分成 N×M 个正方形小块,每块是一平方米。这些小块高低不平,
27+ // 每一小块地都有自己的高度H(i, j)米。水可以由任意一块地流向周围四个方向的四块地中,
28+ // 但不能直接流入对角相连的小块中。一场大雨后,许多低洼地方都积存了不少降水,求出它最多能积存多少立方米的降水么?
29+ int trap (int * a, int n)
30+ {
31+ if ( a == NULL || n == 0 )
32+ return 0 ;
33+ int * left = new int [n];
34+ if ( left == NULL )
35+ return 0 ;
36+ int * right = new int [n];
37+ if ( right == NULL )
38+ return 0 ;
39+
40+ int maxL = 0 ;
41+ for ( int i = 0 ; i < n-1 ; i++ )
42+ {
43+ left[i] = maxL;
44+ maxL = max (maxL, a[i]);
45+ }
46+
47+ int maxR = 0 ;
48+ for ( int i = n-1 ; i >= 0 ; i-- )
49+ {
50+ right[i] = maxR;
51+ maxR = max (maxR, a[i]);
52+ }
53+
54+ int res = 0 ;
55+ for ( int i = 0 ; i < n-1 ;i++)
56+ {
57+ int v = min (left[i], right[i]) - a[i];
58+ if ( v > 0 )
59+ res += v;
60+ }
61+ delete[] left;
62+ delete[] right;
63+ return res;
64+ }
You can’t perform that action at this time.
0 commit comments