ZeroJudge F418: Word Search Puzzle

題目敘述

每筆測資第一行有六個正整數N、M、R1、C1、R2、C2,接下來要輸入一個N乘以M的二維字元。R1到R2代表上下,C1到C2代表左右,要求輸出這個二維字元中的R1~R2、C1~C2的字串。


範例輸入 #1

10 14 4 3 10 9

VBREEFISHRACHP

ANACROCODILEEB

AOSTRICHTEGRDA

IADDHCHEETAHGD

BHRODRAVENENEG

EYWDLSAMOLELHE

ARTPVPRCBOLROR

RHTOAAHCROWAGH

CCANNORIAZEBRA

HANYTAEKNINAWA

範例輸出 #1

DOLPHIN


範例輸入 #2

3 4 1 1 3 1

ROAR

OINK

WOOF

範例輸出 #2

ROW


解題思路

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

解題程式碼如下 (僅供參考):

#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 M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天