Given **N * M** rectangular park having **N** rows and **M** columns, each cell of the park is a square of unit area and boundaries between the cells is called hex and a sprinkler can be placed in the middle of the hex. The task is to find the minimum number of sprinklers required to water the entire park.

**Examples:**

Input:N = 3 M = 3

Output:5

Explanation:

For the first two columns 3 sprinklers are required and for last column we are bound to use 2 sprinklers to water the last column.

Input:N = 5 M = 3

Output:8

Explanation:

For the first two columns 5 sprinklers are required and for last column we are bound to use 3 sprinklers to water the last column.

**Approach:**

- After making some observation one thing can be point out i.e for every
**two**column,**N**sprinkler are required because we can placed them in between of two columns. - If
**M**is even, then clearly**N* (M / 2)**sprinklers are required. - But if
**M**is odd then solution for**M – 1**column can be computed using even column formula, and for last column add**( N + 1) / 2**sprinkler to water the last column irrespective of N is odd or even.

Here is implementation of above approach:

## C++

`// C++ program to find the ` `// minimum number sprinklers ` `// reqired to water the park. ` ` ` `#include <iostream> ` `using` `namespace` `std; ` `typedef` `long` `long` `int` `ll; ` ` ` `// Function to find the ` `// minimum number sprinklers ` `// required to water the park. ` `void` `solve(` `int` `N, ` `int` `M) ` `{ ` ` ` ` ` `// General requirements of ` ` ` `// sprinklers ` ` ` `ll ans = (N) * (M / 2); ` ` ` ` ` `// if M is odd then add ` ` ` `// one additional sprinklers ` ` ` `if` `(M % 2 == 1) { ` ` ` `ans += (N + 1) / 2; ` ` ` `} ` ` ` ` ` `cout << ans << endl; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `N, M; ` ` ` `N = 5; ` ` ` `M = 3; ` ` ` `solve(N, M); ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to find minimum ` `// number sprinklers required ` `// to cover the park ` `class` `GFG{ ` ` ` `// Function to find the minimum ` `// number sprinklers reqired ` `// to water the park. ` `public` `static` `int` `solve(` `int` `n, ` `int` `m) ` `{ ` ` ` ` ` `// General requirements of sprinklers ` ` ` `int` `ans = n * (m / ` `2` `); ` ` ` ` ` `// If M is odd then add one ` ` ` `// additional sprinklers ` ` ` `if` `(m % ` `2` `== ` `1` `) ` ` ` `{ ` ` ` `ans += (n + ` `1` `) / ` `2` `; ` ` ` `} ` ` ` `return` `ans; ` `} ` ` ` `// Driver code ` `public` `static` `void` `main(String args[]) ` `{ ` ` ` `int` `N = ` `5` `; ` ` ` `int` `M = ` `3` `; ` ` ` ` ` `System.out.println(solve(N, M)); ` `} ` `} ` ` ` `// This code is contributed by grand_master ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to find the ` `# minimum number sprinklers ` `# required to water the park. ` ` ` `# Function to find the ` `# minimum number sprinklers ` `# reqired to water the park. ` `def` `solve(N, M) : ` ` ` ` ` `# General requirements of ` ` ` `# sprinklers ` ` ` `ans ` `=` `int` `((N) ` `*` `int` `(M ` `/` `2` `)) ` ` ` ` ` `# if M is odd then add ` ` ` `# one additional sprinklers ` ` ` `if` `(M ` `%` `2` `=` `=` `1` `): ` ` ` `ans ` `+` `=` `int` `((N ` `+` `1` `) ` `/` `2` `) ` ` ` ` ` `print` `(ans) ` ` ` `# Driver code ` `N ` `=` `5` `M ` `=` `3` `solve(N, M) ` ` ` `# This code is contributed by yatinagg ` |

*chevron_right*

*filter_none*

## C#

`// C# program to find minimum ` `// number sprinklers required ` `// to cover the park ` `using` `System; ` ` ` `class` `GFG{ ` ` ` `// Function to find the minimum ` `// number sprinklers reqired ` `// to water the park. ` `public` `static` `int` `solve(` `int` `n, ` `int` `m) ` `{ ` ` ` ` ` `// General requirements of sprinklers ` ` ` `int` `ans = n * (m / 2); ` ` ` ` ` `// If M is odd then add one ` ` ` `// additional sprinklers ` ` ` `if` `(m % 2 == 1) ` ` ` `{ ` ` ` `ans += (n + 1) / 2; ` ` ` `} ` ` ` `return` `ans; ` `} ` ` ` `// Driver code ` `public` `static` `void` `Main(String []args) ` `{ ` ` ` `int` `N = 5; ` ` ` `int` `M = 3; ` ` ` ` ` `Console.WriteLine(solve(N, M)); ` `} ` `} ` ` ` `// This code is contributed by 29AjayKumar ` |

*chevron_right*

*filter_none*

**Output:**

8

**Time Complexity:** O(1)

**Auxiliary Space:** O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.