码迷,mamicode.com
首页 > 其他好文 > 详细

cogs 1755. 爱上捉迷藏

时间:2017-10-25 21:18:10      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:algo   span   字母   时间   default   状态   main   efault   amp   

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;
}

 

cogs 1755. 爱上捉迷藏

标签:algo   span   字母   时间   default   状态   main   efault   amp   

原文地址:http://www.cnblogs.com/cangT-Tlan/p/7731738.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!