[Nowcoder] 2021年度训练联盟热身训练赛第六场 Mini Battleship | 深搜 回溯 乱搞
題目鏈接
題目描述
Battleship is a game played by two players. Each player has their own grid, which is hidden from their opponent. Each player secretly places some ships on their grid. Each ship covers a horizontal or vertical straight line of one or more continguous squares. Ships cannot overlap. All ships are considered distinct, even if they have the same size.
After placing their ships, the players then take turns taking shots at their opponent’s ships by calling out a coordinate of their opponent’s grid. The opponent must honestly say whether the shot was a hit or a miss. When all of a ship’s squares are hit, that ship sinks (“You sunk my battleship!!”). A player loses when all of their ships are sunk.
Bob is playing a game of Mini Battleship against Alice. Regular Battleship is played on a 10×10 grid with 5 ships. Mini Battleship is much smaller, with a grid no larger than 5×5 and possibly fewer than 5 ships. Bob wonders how many ship placements are possible on Alice’s board given what he knows so far.
The answer will be 0 if Alice is cheating! (Or, if the game setup isn’t possible.)
輸入
The first line of input contains two space-separated integers n (1 ≤ n ≤ 5) and k (1 ≤ k ≤ 5),which represent a game of Mini Battleship played on an n×n grid with k ships.
Each of the next n lines contains a string s (|s| = n). This is what Bob sees of Alice’s grid so far.
A character ‘X’ represents one of Bob’s shots that missed. A character ‘O’ (Letter O, not zero) represents one of Bob’s shots that hit. A Dot (‘.’) represents a square where Bob has not yet taken a shot. Each of the next k lines contains a single integer x (1 ≤ x ≤ n). These are the sizes of the ships.
輸出
Output a single integer, which is the number of ways the k distinct ships could be placed on Alice’s grid and be consistent with what Bob sees.
樣例輸入 Copy
【樣例1】
4 3 .... .OX. .... O..X 3 2 1【樣例2】
4 4 .X.X .XX. ...X .... 1 2 3 4【樣例3】
2 2 .. .. 2 2樣例輸出 Copy
【樣例1】
132【樣例2】
6【樣例3】
4題意:
給定一個n?nn * nn?n的矩陣,其中在XXX上一定不可以放置船,而在OOO上面一定要放置船,在′.′'.'′.′上面可以放置船,也可以不放,問將以下mmm艘船,大小均為1?x1 * x1?x,放置在矩陣中的方案數量
思路:
類似經典的八皇后問題,
首先將所有的m個都成功放置之后,并且所有的O均已成功放置船艘,此時的方案書就應該 + 1
注意船的形狀一共有兩種情況:橫著和豎著,但是對于1 * 1的情況來說就只有一種狀態,這里要特判掉
我們用judge()judge()judge()函數來判斷是否能夠是否可以放置該船,如果說要是放置過程中遇到了’X’,那是一定不能夠放下去的,反之可以放下這艘船,對于能夠放下去的船,我們將它的位置vis[i][j] += 1;
總結
以上是生活随笔為你收集整理的[Nowcoder] 2021年度训练联盟热身训练赛第六场 Mini Battleship | 深搜 回溯 乱搞的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java生成csv文件设置文本格式
- 下一篇: if 条件结构与switch条件选择结构