hihocoder #1094 : Lost in the City微软苏州校招笔试 12月27日 (建图不大【暴力枚举】 子图的4种形态 1Y )

#1094 : Lost in the City

时间限制:10000ms

单点时限:1000ms

内存限制:256MB

描述

Little Hi gets lost in the city. He does not know where he is. He does not know which direction is north.

Fortunately, Little Hi has a map of the city. The map can be considered as a grid of N*M blocks. Each block is numbered by a pair of integers. The block at the north-west corner is (1, 1) and the one at the south-east corner is (N, M). Each block is represented by a character, describing the construction on that block: ‘.‘ for empty area, ‘P‘ for parks, ‘H‘ for houses, ‘S‘ for streets, ‘M‘ for malls, ‘G‘ for government buildings, ‘T‘ for trees and etc.

Given the blocks of 3*3 area that surrounding Little Hi(Little Hi is at the middle block of the 3*3 area), please find out the position of him. Note that Little Hi is disoriented, the upper side of the surrounding area may be actually north side, south side, east side or west side.

输入

Line 1: two integers, N and M(3 <= N, M <= 200).
Line 2~N+1: each line contains M characters, describing the city‘s map. The characters can only be ‘A‘-‘Z‘ or ‘.‘.
Line N+2~N+4: each line 3 characters, describing the area surrounding Little Hi.

输出

Line
1~K: each line contains 2 integers X and Y, indicating that block (X,
Y) may be Little Hi‘s position. If there are multiple possible blocks,
output them from north to south, west to east.

样例输入
8 8
...HSH..
...HSM..
...HST..
...HSPP.
PPGHSPPT
PPSSSSSS
..MMSHHH
..MMSH..
SSS
SHG
SH.
样例输出
5 4

算法分析:在大地图中找子地图,注意:子地图的方向不确定,也就是说,子地图可以旋转4次90度,产生4中形态。只要大地图中,有其中任意一种形态,那个位置就是合法的。找出所有这样的状态。一开始我想把子地图存储成二维数组,后来发现要把它变换成共4中形态,变换的语句描述很是麻烦,修饰语法就得写一大堆。为了一下xu建哥有什么好的策略:可以把子图存储成一维数组。然后按照四中形态的遍历顺序去大地图中进行遍历。看看在当前的i,j,能不能遍历出这样的序列,如果能就说明这个位置合法,直接输出。否则继续枚举寻找。代码:
#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>
#include <algorithm>
#include <ctype.h>

using namespace std;

char ch[202][202];
char c[11];

bool test_ok(int dd, int ff)
{
    int i, j;
    int k=0;
    int ok=1;
    for(i=dd; i<=dd+2; i++)
    {
        for(j=ff; j<=ff+2; j++)
        {
            if(ch[i][j]==c[k])
            {
                k++;
            }
            else
            {
                ok=0; break;
            }
        }
        if(ok==0)
            break;
    }
    if(ok==1)
    {
        return true;
    }
    ok=1; k=0;
    for(j=ff; j<=ff+2; j++)
    {
        for(i=dd+2; i>=dd; i--)
        {
            if(ch[i][j]==c[k])
                k++;
            else
            {
                ok=0; break;
            }
        }
        if(ok==0)
            break;
    }
    if(ok==1)
        return true;

    ok=1; k=0;
    for(i=dd+2; i>=dd; i--)
    {
        for(j=ff+2; j>=ff; j--)
        {
            if(ch[i][j]==c[k])
                k++;
            else
            {
                ok=0; break;
            }
        }
        if(ok==0)
            break;
    }
    if(ok==1)
        return true;

    ok=1; k=0;
    for(j=ff+2; j>=ff; j--)
    {
        for(i=dd; i<=dd+2; i++)
        {
            if(ch[i][j]==c[k])
                k++;
            else
            {
                ok=0; break;
            }
        }
        if(ok==0)
            break;
    }
    if(ok==1)
        return true;

    return false;
}

int main()
{
    int n, m;
    scanf("%d %d", &n, &m);
    int i, j;
    char cc;
    for(i=0; i<n; i++)
    {
        for(j=0; j<m; j++)
        {
            cc=getchar();
            while(!isalpha(cc)&&cc!=‘.‘ ) //不是字母且不是.
            {
                cc=getchar();
            }
            ch[i][j]=cc;
        }
    } //建立地图
    int e=0;
    for(i=0; i<3; i++)
        for(j=0; j<3; j++)
        {
            cc=getchar();
            while(!isalpha(cc)&&cc!=‘.‘)
                cc=getchar();
            c[e++]=cc;
        }
    c[e]=‘\0‘;
    //printf("%s", c);
    //建立小地图
    for(i=0; i<=n-3; i++)
    {
        for(j=0; j<=m-3; j++)
        {
            if(test_ok(i, j))
            {
                printf("%d %d\n", i+1+1, j+1+1);
            }
        }
    }
    return 0;
}

时间: 2024-10-16 09:21:22

hihocoder #1094 : Lost in the City微软苏州校招笔试 12月27日 (建图不大【暴力枚举】 子图的4种形态 1Y )的相关文章

[HiHoCoder]#1094 : Lost in the City 微软苏州校招笔试 12月27日

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi gets lost in the city. He does not know where he is. He does not know which direction is north. Fortunately, Little Hi has a map of the city. The map can be considered as a grid of N*M blocks. Each blo

微软苏州校招笔试 12月27日

题目1 : Lost in the City 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi gets lost in the city. He does not know where he is. He does not know which direction is north. Fortunately, Little Hi has a map of the city. The map can be considered as a grid

20151208,微软12月8日发布12个安全补丁

大家好,我们是微软大中华区安全支持团队. 微软于北京时间2015年12月8日发布了12个新的安全公告,其中8个为严重等级,4个为重要等级,修复了Microsoft Windows.Microsoft Office.Microsoft .NET Framework.Microsoft Lync.Microsoft Silverlight.Internet Explorer和Microsoft Edge软件中的漏洞.其中MS15-124中所修复的漏洞CVE-2015-6164和 MS15-135中所

20141211,微软12月10日发布7个安全补丁

大家好,我们是微软大中华区安全支持团队. 微软于北京时间2014年12月10日发布了7个新的安全公告,其中4个为严重等级,3个为重要等级,共修复Microsoft Windows.Internet Explorer (IE).Office 和 Exchange 中的24个漏洞.建议优先部署MS14-080 和MS14-081. MS14-080 | Internet Explorer 的累积安全更新 (3008923) 此安全更新可解决 Internet Explorer 中 14 个秘密报告的

2015微软创新杯Imaginecup大赛报名进行中(报名截止2014年12月31日23:59)

CSDN高校俱乐部与微软官方合作,2015微软创新杯大赛中国区官网落户CSDN高校俱乐部:http://student.csdn.net/mcs/imaginecup2015 在微软官方设置创新杯中国区奖项之外,CSDN高校俱乐部每个竞赛项目特设一等奖.二等奖.三等奖及纪念奖若干名. CSDN高校俱乐部特别奖(获奖者需在高校俱乐部进行过报名备案):详情-> 1. 一等奖(三支团队): 每个竞赛项目一等奖一名,每支团队获得奖金2,000元人民币,团队成员每人尊享2015 CSDN VIP年卡会员:

20151208,微软12月8日公布12个安全补丁

大家好,我们是微软大中华区安全支持团队. 微软于北京时间2015年12月8日公布了12个新的安全公告.当中8个为严重等级,4个为重要等级,修复了Microsoft Windows.Microsoft Office.Microsoft .NET Framework.Microsoft Lync.Microsoft Silverlight.Internet Explorer和Microsoft Edge软件中的漏洞.当中MS15-124中所修复的漏洞CVE-2015-6164和 MS15-135中所

微软将于12月3日再次尝试把HoloLens送入太空

微软再次尝试将HoloLens送入太空.两部增强现实设备原型现在已经列入国际空间站补给火箭内部的货物项目,火箭将于12月3日发射. 在六月份,六合资料和美国航空航天局曾尝试将两部HoloLens设备放入SpaceX公司的火箭向国际空间站运送,但是升空后不久就爆炸了.这一次,HoloLens设备将搭载由Orbital Sciences打造的火箭.我们希望这一次能够成功. 美国航空航天局希望宇航员登上国际空间站,然后在一个名为Sidekick的计划中测试HoloLens,该计划旨在让地球上的人们可以

SQL点滴6—“微软不认识闰年2月29日”&amp;字符&quot;N&quot;的作用

原文:SQL点滴6-"微软不认识闰年2月29日"&字符"N"的作用 http://www.cnbeta.com/articles/50580.htm这个网页新闻中报告许多微软软件不能识别闰年的2月29号 ,其中就包含SQL Server 2008,本人就在自己的SQL Server 2008中写了几个语句试验,这几个语句显示能得到2月29号这一天,不知道照这则新闻所说在这一天安装软件会不会导致错误. select DATEADD(DD,1,'28/Feb/2

hihoCoder - 1094 - Lost in the City (暴力枚举!!)

#1094 : Lost in the City 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi gets lost in the city. He does not know where he is. He does not know which direction is north. Fortunately, Little Hi has a map of the city. The map can be considered as a gri