zoukankan      html  css  js  c++  java
  • Q10010: Where's Waldorf? 字符搜索

    Q10010: Where's Waldorf?

    給你一個m*n的字元方塊(1 <= m,n <=50),以及一些字串,請你找出這些字串在字元方塊中出現的位置。請參考Sample Output。

    我們在字元方塊中尋找字串的方向可以有8個:往左、往右、往上、往下、往左上、往左下、往右上、往右下。另外,請忽略字元大小寫,即 Aa 應被視為相同的字元。

    Input

    輸入的第一列有一個整數代表以下有幾組測試資料。

    每組測試資料的第1列,有2個整數m,n(1 <= m,n <=50),代表接下來的文字方塊有m列,每列有n個字元。在文字方塊之後的一列有一個整數 k,代表接下來的k列為欲搜尋的字串。請參考Sample Input。

    Output

    每組測試資料中欲搜尋字串,請輸出其出現在文字方塊中的位置X Y。(第X列,第Y行)

    如果在文字方塊中該字串出現在不只一個地方,請輸出在最左上方的那一組(以欲搜尋字串的第一個字元來比較)。所有欲搜尋的字串至少出現一次。

    測試資料間也請空一列。

    Sample input

    2
    
    8 11
    abcDEFGhigg
    hEbkWalDork
    FtyAwaldORm
    FtsimrLqsrc
    byoArBeDeyv
    Klcbqwikomk
    strEBGadhrb
    yUiqlxcnBjf
    4
    Waldorf
    Bambi
    Betty
    Dagbert
    
    2 2
    ab
    Ca
    3
    a
    ba
    a 

    Sample Output

    2 5
    2 3
    1 2
    7 8
    
    1 1
    1 2
    1 1
    在网上找到的一份代码,写得挺不错的,看了代码之后学习了
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<ctype.h>
    #define MAXN 60
    
    int cas, m, n, q;
    int x, y;
    char r[MAXN][MAXN];
    const int dx[] = { 1, 1, 1, -1, -1, -1, 0, 0};
    const int dy[] = { 0, 1, -1, 0, 1, -1, 1, -1};
    
    void search( const char *a, int &x, int &y)
    {
        int pos, nx, ny;
        for( int i = 1; i <= m; i ++)
        {
            for( int j = 1; j <= n; j ++)
            {
                if( r[i][j] == a[0])
                {
                    for( int k = 0; k < 8; k ++)
                    {
                        pos = 0; nx = i; ny = j;
                        while( a[pos] && a[pos] == r[nx][ny])
                        {
                            nx += dx[k];
                            ny += dy[k];
                            pos ++;
                        }
                        if( a[pos] == 0)
                        {
                            x = i;
                            y = j;
                            return;
                        }
                    }
                }
            }
        }
    }
    
    int main()
    {
        scanf( "%d", &cas);
        for( int tt = 1; tt <= cas; tt ++)
        {
            char word[MAXN];
            if( tt >= 2) printf( "\n");
            memset( r, 0, sizeof r);
            scanf( "%d%d", &m, &n);
            for( int i = 1; i <= m; i ++)
            {
                scanf( "%s", word);
                for( int j = 1; j <= n; j ++)
                {
                    r[i][j] = tolower(word[j - 1]);
                }
            }
    
            scanf( "%d", &q);
            while( q --)
            {
                scanf( "%s", word);
                int len = strlen( word);
                for( int i = 0; i < len; i ++)
                {
                    word[i] = tolower( word[i]);
                }
                search( word, x, y);
                printf( "%d %d\n", x, y);
            }
        }
        return 0;
    }
    
  • 相关阅读:
    【C++】资源管理
    【Shell脚本】逐行处理文本文件
    【算法题】rand5()产生rand7()
    【Shell脚本】字符串处理
    Apple iOS产品硬件参数. 不及格的程序员
    与iPhone的差距! 不及格的程序员
    iPhone游戏 Mr.Karoshi"过劳死"通关. 不及格的程序员
    XCode V4 发布了, 苹果的却是个变态. 不及格的程序员
    何时readonly 字段不是 readonly 的?结果出呼你想象!!! 不及格的程序员
    object file format unrecognized, invalid, or unsuitable Command 不及格的程序员
  • 原文地址:https://www.cnblogs.com/UnGeek/p/2551526.html
Copyright © 2011-2022 走看看