codevs 2059 逃出克隆岛

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 黄金 Gold

题目描述 Description

oi小组的yh酷爱玩魔兽rpg,每天都会在u9搜索最新的rpg地图。

今天,他找到一张名为《逃出克隆岛》的地图,在这张地图中,有一个n行m列的矩阵,矩阵由’Y’,’C’,’#’,’*’,’P’,5种元素组成。’Y’表示yh的出生位置,C表示克隆岛的出口,’#’表示该处不可通过,’*’表示通过该处需要消耗金币cost,’P’表示传送阵,任意两个传送阵之间可以免费互相传送。由于这仅仅是第一关,yh不想浪费太多的体力,聪明的你能帮他算出从’Y’出发到’C’最少需要消耗多少金币吗?当然,如果yh永远无法到达’C’,请输出” screw you!”以表到yh的不满。

输入描述 Input Description

第一行两个整数,n,m,表示矩阵有n行m列

接下来为n行m列的矩阵,由’Y’,’C’,’#’,’*’,’P’,组成,含义如题目描述。

输出描述 Output Description

输出1行,表示yh需要花费的最小体力(如果无法到达输出”screw you!”)。

样例输入 Sample Input

【样例输入1】

1 3 3

Y*C

【样例输入2】

1 3 2

Y#C

【样例输入3】

1 5 2

YP#PC

样例输出 Sample Output

【样例输出1】

3

【样例输出2】

screw you!

【样例输出3】

0

数据范围及提示 Data Size & Hint

【数据范围】

对于100%的数据,n*m≤5000,传送阵’P’的数量≤500

BFS

屠龙宝刀点击就送

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>

using namespace std;
char tx[5000][5000];
bool csm[5000][5000],vis[5000][5000];
int cost,start_x,start_y,over_x,over_y,n,m,fx[5]={1,-1,0,0},fy[5]={0,0,-1,1};
void print(int k)
{
    printf("%d",k);
    exit(0);
}
void bfs(int sx,int sy)
{
    int f[50000][4],l=0,r=0;
    f[++r][1]=sx;
    f[r][2]=sy;
    f[r][3]=0;
    do
    {
        int now_x=f[++l][1],now_y=f[l][2];
        for(int j=0;j<4;++j)
        {
            int to_x=now_x+fx[j],to_y=now_y+fy[j];
            if(to_x==over_x&&to_y==over_y)
            print(f[l][3]);
            if(to_x>=1&&to_x<=n&&to_y>=1&&to_y<=m&&tx[to_x][to_y]!=‘#‘&&vis[to_x][to_y]==0)
            {
                if(csm[to_x][to_y]==1)
                {
                    f[++r][1]=to_x;
                    f[r][2]=to_y;
                    f[r][3]=f[l][3];
                    csm[to_x][to_y]=0;
                    for(int i=1;i<=n;++i)
                    {
                        for(int k=1;k<=m;++k)
                        {
                            if(csm[i][k]==1)
                            {
                                csm[i][k]=0;
                                f[++r][1]=i;
                                f[r][2]=k;
                                f[r][3]=f[l][3];
                            }
                        }
                    }
                }
                else
                {
                    vis[to_x][to_y]=1;
                    f[++r][1]=to_x;
                    f[r][2]=to_y;
                    if(tx[to_x][to_y]==‘*‘) f[r][3]=f[l][3]+cost;
                    else f[r][3]=f[l][3];
                }
            }
        }

    }while(l<=r);
}
int main()
{
    scanf("%d%d%d",&n,&m,&cost);
    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=m;++j)
        {
            cin>>tx[i][j];
            if(tx[i][j]==‘P‘) csm[i][j]=1;
            else if(tx[i][j]==‘Y‘) start_x=i,start_y=j;
            else if(tx[i][j]==‘C‘) over_x=i,over_y=j;
        }
    }
    bfs(start_x,start_y);
    printf("screw you!");
    return 0;
}
时间: 2024-11-10 08:13:50

codevs 2059 逃出克隆岛的相关文章

AC日记——逃出克隆岛 (bfs)

2059 逃出克隆岛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description oi小组的yh酷爱玩魔兽rpg,每天都会在u9搜索最新的rpg地图. 今天,他找到一张名为<逃出克隆岛>的地图,在这张地图中,有一个n行m列的矩阵,矩阵由’Y’,’C’,’#’,’*’,’P’,5种元素组成.’Y’表示yh的出生位置,C表示克隆岛的出口,’#’表示该处不可通过,’*’表示通过该处需要消耗金币cost,’P’表示传送阵,任意两个传送阵之间

codevs2059逃出克隆岛(传送门bfs)

/* 和普通的迷宫问题类似只是多了一个叫传送门的东西 对于传送门的处理: 每当跑到传送门就把其余所有传送门周围的点都入队 传送门之间不花费时间并且从不是传送门的点走到传送门 也不花费时间花费时间的(好像说了句废话.) 所以判断一下 */ #include<iostream> #include<cstdio> #include<cstdlib> #include<queue> #include<algorithm> #define maxn 501

逃出你的肖申克(二)(三):笔记

逃出你的肖申克(二):仁者见仁智者见智?从视觉错觉到偏见笔记 1.然而我们的大脑几乎每次都能够从富含歧义的信息中找出最靠谱的解释,作出无比牛B的点估计. 2.先验假设是双刃剑,其锋刃的另一面就是我们常说的"偏见". 3.对于日常生活中的事件,总有一个平凡的解释,和一个疯狂的解释. 4.打破这种偏见的唯一途径就是开阔视野,多积累知识,以及和具有不同知识背景的人讨论,否则就算抱着"我可能是错的"这种信念,你也不知道怎么去证伪自己的一个猜测. 5."这只是一种解

逃出你的肖申克(五)(六):看不见的牢笼

逃出你的肖申克(五):看不见的牢笼(上)笔记 0. 所谓心理学就是关于人脑如何工作的科学,既然社会是由一个个的人构成,而人的行为很大程度上又由我们的大脑所支配,那么从这个根本上去理解很多问题便非常深入本质. 1.“克拉克第一定律”:“如果一位有名望的老科学家告诉你某件事情是可能的,那么他很可能是对的.然而如果他说某件事情是不可能的,那么他极有可能是错的.” 2.为什么说大多数时候换位思考只是个陷阱.因为真正的换位思考,意味着你必须知道对方大脑中所有真正影响他决策和行为的因素,这包含太多的东西:对

逃出你的肖申克(二)(三)(四)

逃出你的肖申克(二):仁者见仁智者见智?从视觉错觉到偏见笔记 0.然而我们的大脑几乎每次都能够从富含歧义的信息中找出最靠谱的解释,作出无比牛B的点估计. 1.先验假设是双刃剑,其锋刃的另一面就是我们常说的“偏见”. 2.对于日常生活中的事件,总有一个平凡的解释,和一个疯狂的解释. 3.打破这种偏见的唯一途径就是开阔视野,多积累知识,以及和具有不同知识背景的人讨论,否则就算抱着“我可能是错的”这种信念,你也不知道怎么去证伪自己的一个猜测. 4.“这只是一种解释(可能),未必是唯一的解释(可能).(

逃出你的肖申克(四)(五)(六)笔记

逃出你的肖申克(四):理智与情感笔记 1.我们知道答案,却往往不知道真正的求解思维过程. 2.真正的理由有时候往往隐藏在意识触及不到的地方,由我们的情绪大脑所掌控,当它引导我们的情绪大脑作出决定之后,才发个红头文件通知我们的理性大脑,我们的理性大脑于是便像文章开头提到的实验中描述的那样,迅速而果断地给出各种听上去很合理的解释,让我们的决定和行为看上去无懈可击. 3.只要我们的情绪大脑首先认定了一件事情,我们那点可怜的理性思维便很容易屈从于情绪大脑发下的命令--把事情往利于自己的方向解释. 4.只

刘未鹏《逃出你的肖申克》系列读后总结

在漫长的进化史中,人的身体演化出一种自动保护机制,这种机制的终极目标,就是保证个体的生命安全和后代繁衍,一切与这个目标相悖的需求,都是低优先级的,这种机制被弗洛伊德称为潜意识,在佛教界被称为内功,忍界则被叫做念力,不论叫什么名字吧,总之看起来是个很好的事儿,但是问题也出在这里. 为什么这么说呢,关键点就在于生物的进化历程超级缓慢.想象人类为了适应环境进化了亿万年,才得以进入石器时代,这个速率慢得跟蜗牛爬一样,与之相对应的,是周遭环境的急剧变化,特别是进入现代社会后的几百年间,环境变化的速率比得上

git检出,克隆,创建

1. 检出.克隆库: git clone git://git.openwrt.org/openwrt.git 2. create a new repository on the command line echo # openwrt >> README.md git init git add README.md git commit -m "first commit" git remote add origin https://github.com/supertt/open

使用 trash-cli 逃出 rm 命令误删除重要文件的阴影

今天是一个难忘的日子,当时本来想清除我们公司网站cms目录下面一些cdn推送网页后残留的垃圾文件,结果在执行rm -rf conten* 时打成了rm -rf conten *结果就悲剧了.cms目录下面的全部给删除了,网站首页的样式全没了,当时就傻了,网站直接挂升级页面,由于备份的也不全,只能把测试环境的拉一份,和php的同事慢慢改,虽然最好好了,但是给公司造成的影响挺严重的,我真是欲哭无泪. 虽然最后解决了,但给我留下很大的阴影,就在网上找看看有没有像windows那样的.删除了可以去回收站