ZeroJudge F418: Word Search Puzzle

Word Search Puzzle 是一種常見的英文字謎,通常由一個矩形的方格所構成,每一個方格中有一個字母。玩家可以由左至右、由上至下,或是由左上至右下找到連續的字母拼成指定的單字。

文文已經找到了一個單字,給你起始及結束的位罝,麻煩你把這個單字拼出來

ZeroJudge F418
題目示意圖

範例測資

範例輸入範例輸出
輸入的第一行有六個整數 H (1 ≤ H ≤ 20) 和 W (1 ≤ W ≤ 50),代表字謎的高與寬度,
R1、C1 及 R2、C2 分別為起始及結束位置,R1 和 R2 是由上而下第幾列,C1 和 C2 是由左而右第幾個字元。(1 ≤ R1 ≤ R2 ≤ H,1 ≤ C1 ≤ C2 ≤ W)
接下來的 H 行,每行有 W 個大寫字母,代表這個字謎的內容。
輸出由起始位置到結束位置的連續字元所拼成的單字。
10 14 4 3 10 9
VBREEFISHRACHP
ANACROCODILEEB
AOSTRICHTEGRDA
IADDHCHEETAHGD
BHRODRAVENENEG
EYWDLSAMOLELHE
ARTPVPRCBOLROR
RHTOAAHCROWAGH
CCANNORIAZEBRA
HANYTAEKNINAWA
(本測資請見上圖)
DOLPHIN
3 4 1 1 3 1
(請見下方表格)
ROW

範例輸入/輸出 (表格)

ROAR
OINK
WOOF

解題思路

這題可以直接用For迴圈將字元加起來,需要注意的是要先判斷答案的字串是要求左到右平行、上到下垂直、還是左上到右下斜的。

「左到右」就是 R 是固定的只需要跑 For迴圈 從 C1~C2

「上到下」就是 C 是固定的只需要跑 For 迴圈 從 R1~R2

「斜著走」就是跑 For 迴圈 從 R1~R2,但是同時加字元的時候也要一直將 C1 進行 +1

範例程式碼-ZeroJudge F418: Word Search Puzzle

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int N, M;
    cin >> N >> M;
    int R1, C1, R2, C2;
    cin >> R1 >> C1 >> R2 >> C2;
    vector<string>v;
    for (int i = 0; i<N; i++)
    {
        string str;
        cin >> str;
        v.push_back(str);
    }
    string ans = "";
    if (R1 == R2)
    {
        for (int i = C1-1; i<C2; i++)
        {
            ans += v[R1-1][i];
        }
    }
    else if (C1 == C2)
    {
        for (int i = R1-1; i<R2; i++)
        {
            ans += v[i][C1-1];
        }
    }
    else
    {
        for (int i = R1-1; i<R2; i++)
        {
            ans += v[i][C1-1];
            C1++;
        }
    }
    cout << ans << "\n";
}

//ZeroJudge F418
//Dr. SeanXD

2 則留言

發佈留言