cogs 1755. 爱上捉迷藏

1755. 爱上捉迷藏

☆   输入文件:kadun.in   输出文件:kadun.out   简单对比
时间限制:0.001 s   内存限制:2 MB

【背景】

乃们都玩过赛尔号吧……,那有木有玩过赛尔号2呢?(众人:你TM都多大了……)

(⊙o⊙)…,多大怎么了,哥一直怀着一颗永不泯灭的童心~

【问题描述】

    众所周知(呃,没玩过的除外),卡顿啾啾是赛尔号2里的一个普通系精灵,其未进化体名叫啾啾,进化后体型肥胖,励志减肥。历经磨难终于摆脱肥胖的困扰,前后变化实在让人难以想象。咳咳,这不是问题的重点……(众人:-_-#)

    (从众人乱拳中挤了出来)好吧,开始今天的重点。啾啾是个很调皮的精灵,它特别喜欢玩捉迷藏,本题即是由赛尔号2中爱上捉迷藏这一小游戏改编而来。通关小游戏就可以……(瞥了一眼青筋暴起的一群禽兽…)呃,不要那么暴力好不好~TAT

啾啾藏在了一个m*n的矩阵中,这个矩阵有m*n个格子,啾啾就在其中之一。这种格子采用特殊材料制成,外表透明,藏在其中用眼睛根本无法看到什么变化。但是这毕竟是赛尔号的科技,所以小赛尔只要把手在格子上轻轻敲击就会得到回复,我们记为该格子的状态。其中若返回为X,则该点可能啾啾藏身的格子,但也有可能是距离啾啾很远的格子;若返回为N,则啾啾就在以该点为中心的7*7的矩阵中的某个格子;若返回为C, 则啾啾就在以该点为中心的5*5的矩阵中的某个格子;若返回为Z;则啾啾就在以该点为中心的3*3的矩阵中的某个格子。

现在某个小赛尔为了快速通关而获得奖励,使用了外挂,从而获得了每个格子的返回值,但是看着眼花缭乱的字母,却无从下手,于是便找到了你(至于怎么找到的,为了我的生命安全,我还是不说了),请你编写程序帮助他找到啾啾所在的格子。(众人:这种水题还好意思说这么长时间!)啊!!!!!!(惨叫声)

【输入数据格式】

第一行两个数n,m,表示一个m*n的矩阵;

第二行到第m−1行每行一个长度为n的字符串,表示矩阵状态。

【输出数据格式】

一行两个数,分别为啾啾藏身的格子的列数和行数。

【输入样例】

6 4

ZZZCNX

ZXZCNX

ZZZCNX

CCCCNX

【输出样例】

2 2

【数据范围及约定】  

20%的数据:1≤n,m≤5;

60%的数据:1≤n,m≤70;

100%的数据:1≤n,m≤100;  

【Hite】

真的真的很水。

思路:暴力搜索。

跑的慢的

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,num;
struct nond{
    int x,y,flag;
}v[11010];
int map[110][110];
int main(){
    freopen("kadun.in","r",stdin);
    freopen("kadun.out","w",stdout);
    scanf("%d%d",&m,&n);
    for(int i=1;i<=n;i++){
        char s[110];
        scanf("%s",s+1);
        for(int j=1;j<=m;j++){
            if(s[j]=='X'){
                v[++num].x=i;
                v[num].y=j;
            }
            else if(s[j]=='N')    map[i][j]=3;
            else if(s[j]=='C')    map[i][j]=2;
            else if(s[j]=='Z')    map[i][j]=1;
        }
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(map[i][j]!=0)
                for(int k=1;k<=num;k++)
                    if(v[k].flag||v[k].x<i-map[i][j]||v[k].x>i+map[i][j]||v[k].y<j-map[i][j]||v[k].y>j+map[i][j])
                        v[k].flag=1;
    for(int i=1;i<=num;i++)
        if(!v[i].flag){
            cout<<v[i].y<<" "<<v[i].x;
            break;
        }
}

跑的快的

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int m,n;
char s[110][110];
int main(){
    freopen("kadun.in","r",stdin);
    freopen("kadun.out","w",stdout);
    scanf("%d%d",&m,&n);
    for(int i=0;i<n;i++)
        scanf("%s",s[i]);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(s[i][j]=='X'&&(s[i+1][j]=='Z'&&s[i][j+1]=='Z'||s[i-1][j]=='Z'&&s[i][j-1]=='Z')){
                printf("%d %d",j+1,i+1);
                return 0;
            }
    return 0;
}
细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
原文地址:https://www.cnblogs.com/cangT-Tlan/p/7731738.html