WIKIOI-1337 银行里的迷宫

题目描述 Description
       楚楚每一次都在你的帮助下过了一关又一关(比如他开宴会)。这一次,你的才华让楚楚被劫住了!(好心办了坏事啊,下次不理他了

=_=)

       歹徒: hehe~

       楚楚:(冷汗ing)干啥^_^!(PS:现在还笑得出来!!!)

       歹徒:抢劫的说~

       楚楚:你们想干啥!!(PS:不是告诉你了,是抢劫~)

       歹徒:这里是银行的陷阱,也就是一个迷宫……你要带我们离开这里……否则……

       楚楚:(想:那你是咋抓到我的,郁闷)好吧……

       楚楚认为生命还是最重要的……(大不了出去以后找警察……)

       于是,他认命了……

       他从歹徒口中得知这是一个方形的迷宫(歹徒老大:你还要啥形状的,跟我说一声!),他们的位置是[1,1],要走到[n,m],长是n,宽是

m,这是一个很大的迷宫,里面有陷阱(小明:能不能踩进去的,说!楚楚:当然不能,不过可以用轻功,多花一秒蓄力~用轻功走过的陷阱会石

化,变成路,而且刚好走过~ 歹徒想:虾米轻功~明明是杀人利器~还好没和他打起来~),还有墙(PS:说一声,墙不能穿过,虽有轻功,但是还

是过不去墙,这个墙也是银行的秘密~即使你是神犇也不行哦~ 楚楚:又坑我~)。(小明:路呢? 楚楚:废话,当然有,只不过这是银行机密,

不能说!)

       楚楚想在最短时间里走出迷宫(小明:否则歹徒会发怒的,对不对? 楚楚:废话!),若是超过了歹徒老大的忍耐时间time,那就……

       (楚楚:小明……SOS,别忘了帮我报警!! 传呼机:嘀,嘀,嘀…… 楚楚:咋么可以这样!可恶!)于是,他顺便还要去找电话报个

警(报警不需要时间,打通即可。且电话机可能有多个,但也没有可能没有~)。

楚楚:我的预感告诉我,这个迷宫只能向右或下走~郁闷了~

输入描述 Input Description
       第1行是n,m, time,三个整数。

       第2到n+1行每行有m个字母(有大写也有小写的)(楚楚:歹徒真笨~,就不能翻译一下吗~)。

       字母解析:T(t)是陷阱,W(w)是墙,R(r)是路,A(a)是电话~ (遇到不认识的字符就~算之为路!)

输出描述 Output Description
       仅一行走出迷宫的最小时间t(走一步要一秒的说),不能在规定时间走出迷宫,或者打不了电话,请输出“Oh my god!”(不包括引号)

样例输入 Sample Input
3 3 100

RRR

WWA

TRR

样例输出 Sample Output
4

 

 

 

//递归超时代码
#include<stdio.h>
#include<algorithm>
using namespace std;
char a[550][550];
int b[5000];
int endx,endy,phone,k=0,flag=0;
void Found(int x,int y,int sum)
{
   if(flag==1)
   return;
   if(a[x][y]=='W'||a[x][y]=='w')
   return;
   if(a[x][y]=='A'||a[x][y]=='a')
   phone=1;//这里判断不清晰
   if(!(x==1&&y==1))
   {
      if(a[x][y]=='T'||a[x][y]=='t')
      sum+=2;
      else
      sum++;
   }
   if(x==endx&&y==endy)
   {b[k++]=sum;flag=1;return;}
   if(y+1<=endy) Found(x,y+1,sum);
   if(x+1<=endx) Found(x+1,y,sum);
   if(y-1>=1) Found(x,y-1,sum);
   if(x-1>=1) Found(x-1,y,sum);
}
int main()
{
    int i,j,n,m,time;
    scanf("%d%d%d",&n,&m,&time);
    getchar();
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
           scanf("%c",&a[i][j]);
        }
        if(i!=n)
        getchar();
    }
    //若[1,1]或者[n,m]不是路,那么就不能活着回去了
    if((a[1][1]=='W'||a[1][1]=='w')||(a[n][m]=='W'||a[n][m]=='w'))
    printf("Oh my god!\n");
    else
    {
        endx=n;endy=m;phone=0;
        Found(1,1,0);
        sort(b,b+k);
        if(b[0]<=time&&phone==1)
        printf("%d\n",b[0]);
        else
        printf("Oh my god!\n");
    }
    return 0;
}

 
 
AC代码:

//动态规划,由已知步数求未知步数 (参考,源代码属于“忆_碎碎念”)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <cctype>
#include <climits>
using namespace std;

#define BIGNUM 25000000
char str[505][505];
int dp[505][505];
int n, m, limit;
bool phone = false;
int main()
{
 scanf("%d%d%d", &n, &m, &limit);
 for(int i = 1; i <= n; i++)
  for(int j = 1; j <= m; j++)
  {
   scanf(" %c", &str[i][j]);
   str[i][j] = toupper(str[i][j]);
  }
 if(str[1][1] == 'W' || str[n][m] == 'W' || str[1][1] == 'T' || str[n][m] == 'T')
 {
  printf("Oh my god!");
  exit(0);
 }
 else
 {
  for(int i = 1; i <= n; i++)
  {
   for(int j = 1; j <= m; j++)
   {
    if(i == 1 && j == 1)//起点不做计算
     continue;
    dp[i][j] = BIGNUM;//赋值为很大的值,为了便于后面计算步数
    if(str[i][j] == 'W')//碰见墙就不做计算 ,直接返回
     continue;
    if(str[i][j] == 'A')
     phone = true//有一次出现电话了就标记一下
     //因为题设只有两种走法,向下或向右,那么假如到了一个坐标,那么只能从左边过来或者是从上边过来
     //只要现在的远远大于原来的,就说明原来可能从那里经过,所以本格加上次的时间再加一次这次的时间
     //就是 dp[i][j] = dp[i - 1][j] + 1;或 dp[i][j] = dp[i][j - 1] + 1;
    //如果是陷阱就要多加一次 dp[i][j]++;
    if(i - 1 >= 1 && dp[i - 1][j] < dp[i][j])
     dp[i][j] = dp[i - 1][j] + 1;
    if(j - 1 >= 1 && dp[i][j - 1] < dp[i][j])
     dp[i][j] = dp[i][j - 1] + 1;
    if(str[i][j] == 'T')
     dp[i][j]++;
   }
  }
 }
 if(phone && dp[n][m] <= limit)
  printf("%d", dp[n][m]);
 else
  printf("Oh my god!");
 return 0;
}

 

时间: 2024-09-01 10:42:40

WIKIOI-1337 银行里的迷宫的相关文章

请问各位老师,想在银行里做网络安全,需要具备哪些知识?

问题描述 请问各位老师,想在银行里做网络安全,需要具备哪些知识?谢谢大家! 解决方案 解决方案二:首先要有后台,然后你变成NAZ解决方案三:TCP/IPSSL密码学原理解决方案四:背景很重要啊!!解决方案五:入侵一下解决方案六:需要具备后台人物--解决方案七:我也想知道!!!!!!!!!!!!解决方案八:我也想知道!!!!!!!!!!!!解决方案九:细心的人可以发现,当我们访问一些银行网站时,网址不是http开始而是https,其实也就是用了SSL证书加密web传输中的一些敏感信息

银行里的钱真的安全吗,可能它们已经是黑客的囊中物

如今,现金交易已经越来越少,我们的财产可能只是银行服务器上的一串数字,这就给黑客们带来偷取巨额财产的机会.最近发生的一些令人瞠目结舌事情让全世界震惊,我们的应该好好考虑一下数字化金融系统的安全性了. 黑客伪造信用卡取款1.4万次盗14亿日元! 近日,电影中的情节再度上演,据<卫报>报道,几天前,100名小偷在日本便利店的ATM机上至少偷走了14亿日元(约为人民币8700万元),而整个过程仅用了3个小时的时间,并且直到现在还没有逮捕到任何嫌疑犯.这场惊天偷盗案由一个有组织性的犯罪团队策划,他们利

教你几招对付银行里态度恶劣的工作人员[转载]_经典网摘

说的非常不错,越大的公司或企业越不正规,鸟规矩还不少 一.换零钱 哥哥结婚叫我去换50张20的rmb发小红包用. 拿了1k去银行换,sb态度极其不好的说"没有,不能换给你" 态度实在恶劣啊.我十分凶恶的反问"你再说一次"家伙很牛的说"就是没有" 我说"你=着"sb说"你威胁我啊" 我拿了身份证说"开户,存1k". 结束了,我说"再提20"连着提了二次20. sb说&q

福建农信行微信银行功能介绍

  福建农信行微信银行是银行面向客户的新一代智能互动服务平台,客户可通过本平台获取相关的个人客户金融服务,已开设个人电子银行业务的客户通过微信号与本人电子银行进行在线身份验证,验证通过后可获取更多的个人客户金融服务. 微信银行公众账号"福建农信社农商银行" .微信银行关注方式(以微信5.0版为例): 1.登录微信,点击"通讯录"右上角"+",选择"搜号码"或"查找公众号",搜索"福建农信社农商银行

为了抗衡支付宝、ApplePay,日本70家银行计划发行虚拟货币“J币”

功能:支付.转账 据介绍,J币的主要功能是为个人.企业提供移动支付和转账服务."它不会像比特币那样有明显的价格波动,它与日元等价".J币与银行账户绑定,能事先将存在银行里的日元兑换为J币,结账时就可以直接使用.个人之间的转账不会产生手续费,海外转账更加便宜. 据中新网报道,瑞穗银行也曾探索独立发展的道路,但最终转为发展其他银行亦可参与其中的平台建设.瑞穗银行也曾征询过三菱日联的合作意向,两家银行都在考察合作实现的可能性. 三菱日联金融集团正在尝试推行"MUFG虚拟货币&quo

德国交通信贷银行CEO:银行不是越大越好

--专访德国交通信贷银行CEO沃尔夫冈·德雷瑟 □ 记者 陈楠 受全球危机的波及,国际运输业遭受重创.几年间,日本航空公司.墨西哥航空公司纷纷宣布破产,道路运输也受到不同程度的波及.德国联邦统计局2010年4月20日公布的数据显示,2009年德国货物运输业全面受损,其中远洋运输运量2.654亿吨,仅达到2003-2004年水平,比上年同比下降17%,内河航运.铁路和空运分别减少16.8%.15.9%和6.1%.身处运输金融业暴风中心的德国交通信贷银行(DVB)CEO沃尔夫冈·德雷瑟也向<商务周刊

余额宝面临考验:银行或取消基金公司提前支取存款不罚息

早报讯 在中国银行业协会上周动议将"'余额宝'等互联网金融货币基金存放银行的存款纳入一般性存款管理"后,中国银监会昨日展开了相关调研.据路透社报道,3月5日银监会开始调研银行储蓄与互联网理财情况,尤其是针对" 两率一致"问题.在 高速发展了半年后,互联网金融正在改变传统金融业.数据显示,今年1月份银行里的人民币存款流失了 9000多亿元,而最早进入该领域的"余额宝",目前规模已超过4000亿元.这也使得今年的全国"两会"中,互

男子十年前活期账户被销户 银行未提前通知

昨天,去工商银行取钱的于先生郁闷地发现,自己于2004年1月20日开户的活期存折账户竟然被销了户."这张存折是我在10年前购买保险时使用的,销户时银行都没有通知." 于先生说,他的工资是通过工商银行发放的.2004年1月20日,他去银行办理业务时,银行的工作人员劝他购买了一份美国友邦http://www.aliyun.com/zixun/aggregation/6173.html">保险公司出售的保险."保险金额为5万元,一次性付清."于先生说,他算

段子里的商业规律(续)

再来说一个流传很久的段子. 一个老太跑一家银行里要存钱,款项巨大,银行老总亲自接待.老总和老太太套近乎:您大概很会做生意吧.老太太说:不,我只是很会赌博,逢赌必赢.老总表示"这不科学".老太太说:不信我和你赌一个,我赌你明儿这时候,你的两个蛋蛋会变成方的,赌金50万刀如何?老总琢磨了一下,表示应战. 次日,老太准点到来,提着个箱子,里面有50万刀.身后还跟着一个律师.老太说,我们需要一位律师见证一下,并要求老总脱下裤子,眼见为实.老总照办,露出蛋蛋让老太摸了摸,果然还是圆的,老太说:好