1. 程式人生 > >[NowCoder] 字符迷陣(網易遊戲)

[NowCoder] 字符迷陣(網易遊戲)

== nbsp xxx hhhh 得到 拼接 測試數據 col adf

字符迷陣是一種經典的智力遊戲。玩家需要在給定的矩形的字符迷陣中尋找特定的單詞。 在這題的規則中,單詞是如下規定的: 1. 在字符迷陣中選取一個字符作為單詞的開頭; 2. 選取右方、下方、或右下45度方向作為單詞的延伸方向; 3. 以開頭的字符,以選定的延伸方向,把連續得到的若幹字符拼接在一起,則稱為一個單詞。 技術分享圖片 以圖1為例,如果要在其中尋找單詞"WORD",則綠色框所標示的都是合法的方案,而紅色框所標示的都是不合法的方案。 現在的問題是,給出一個字符迷陣,及一個要尋找的單詞,問能在字符迷陣中找到多少個該單詞的合法方案。註意合法方案是可以重疊的,如圖1所示的字符迷陣,其中單詞"WORD"的合法方案有4種。
輸入描述:
輸入的第一行為一個正整數T,表示測試數據組數。 接下來有T組數據。每組數據的第一行包括兩個整數m和n,表示字符迷陣的行數和列數。接下來有m行,每一行為一個長度為n的字符串,按順序表示每一行之中的字符。再接下來還有一行包括一個字符串,表示要尋找的單詞。  數據範圍: 對於所有數據,都滿足1<=T<=9,且輸入的所有位於字符迷陣和單詞中的字符都為大寫字母。要尋找的單詞最短為2個字符,最長為9個字符。字符迷陣和行列數,最小為1,最多為99。 對於其中50%的數據文件,字符迷陣的行列數更限制為最多為20。
輸出描述:
對於每一組數據,輸出一行,包含一個整數,為在給定的字符迷陣中找到給定的單詞的合法方案數。
輸入例子1:
3
10 10
AAAAAADROW
WORDBBBBBB
OCCCWCCCCC
RFFFFOFFFF
DHHHHHRHHH
ZWZVVVVDID
ZOZVXXDKIR
ZRZVXRXKIO
ZDZVOXXKIW
ZZZWXXXKIK
WORD
3 3
AAA
AAA
AAA
AA
5 8
WORDSWOR
ORDSWORD
RDSWORDS
DSWORDSW
SWORDSWO
SWORD
輸出例子1:
4
16
5

按照題意,直接code就行。

#include <iostream>
#include <string>
#include <vector>
using
namespace std; int main() { int T; cin >> T; while (T--) { int m, n; cin >> m >> n; vector<string> svec(m); for (int i = 0; i < m; ++i) cin >> svec[i]; string word; cin >> word; int count = 0; for (int i = 0; i < m; ++i) { for (int j = 0; j < n; j++) { if (svec[i][j] == word[0]) { int x = i, y = j, z = 0; while (y < n && z < word.size()) { if (svec[i][y] == word[z]) { y++; z++; } else { break; } if (z == word.size()) { count++; break; } } x = i, y = j, z = 0; while (x < m && z < word.size()) { if (svec[x][j] == word[z]) { x++; z++; } else { break; } if (z == word.size()) { count++; break; } } x = i, y = j, z = 0; while (x < m && y < n && z < word.size()) { if (svec[x][y] == word[z]) { x++; y++; z++; } else { break; } if (z == word.size()) { count++; break; } } } } } cout << count << endl; } return 0; }

[NowCoder] 字符迷陣(網易遊戲)