周游列国

Time Limit: 1000ms   Memory limit: 32768K  有疑问?点这里^_^

题目描述

大家都知道孔子吧,春秋战国时候的一个老头儿。当时出国还不用护照,所以他经常赶着牛车带着弟子们周游列国。可是这路也并不是那么好走的,当遇到高山时孔子他们就得绕着走了,你得考虑他牛车的实力能不能hold住啊。当然,孔子是个很聪明的人,每次出门前都会四处打听,然后制定出一个赶车路线,然后按照路线去走。但是,由于很多路没有亲自走过他也不确定按这个路线到底能不能周游列国?然而,你有当时的地图,希望你编程判断一下按照孔子的行车路线能不能周游列国。

输入

第一行是行车路线即一个字符串只包含L,R,U和D分别代表左走,右走,上走,下走。接下来以上是两个整数H和W,0 < H,W < 20, 代表地图的高和宽。然后是H*W的地图。S代表孔子的起点。标有1~7的区域分别代表7个国家的领土,#代表高山。

输出

如果孔子能周游列国即经过这7个国家则输出Yes,否则输出No。

示例输入

RDDDDLRRRRUU
5 5
S1111
22#22
33#44
56#77
56777

示例输出

Yes

分析:此题目好坑,需要注意的是 如果给定的路线会经过 '#' 或者 'S' 应该怎样处理 ?   跳出直接输出No,还是,,,?  因为这个,我 WA 好几次!
正确的处理是:遇到'#',回退到上一步。遇到 'S',直接无视 continue 跳过就可以了!
代码:
#include <string.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <math.h> using namespace std; char map[21][21]; int main()
{
int n, m;
char s[2000];
int len;
int i, j, k;
char ch; while(scanf("%s", s)!=EOF)
{
len = strlen(s);
//puts(s); cin>>n>>m;
int dd, ff;
int a[8];
memset(a, 0, sizeof(a)); for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
ch=getchar();
while(ch!='S' && ch!='#' )
{
if(ch>='1' && ch<='7')
{
//map[i][j]=ch;
break;
}
else
{
ch=getchar();
}
}
map[i][j]=ch; if(map[i][j]=='S')
{
dd=i;
ff=j;
}
}
} //puts(s); int flag=1; for(k=0; k<len; k++)
{
if( s[k]=='R' )
{
ff++;
if( ff>=0 && ff<m && (map[dd][ff]>='1' && map[dd][ff]<='7') )
{
a[map[dd][ff]-48]++;
continue;
}
else if(map[dd][ff]=='S')
continue;
else if(map[dd][ff]=='#' )
{
ff--;
} }
else if( s[k]=='L' )
{
ff--;
if( ff>=0 && ff<m && (map[dd][ff]>='1' && map[dd][ff]<='7') )
{ a[map[dd][ff]-48]++;
continue;
}
else if(map[dd][ff]=='S') continue;
else if(map[dd][ff]=='#') ff++; }
else if(s[k]=='U')
{
dd--;
if( dd>=0 && dd<n && (map[dd][ff]>='1' && map[dd][ff]<='7') )
{ a[map[dd][ff]-48]++;
continue;
}
else if(map[dd][ff]=='S') continue;
else if(map[dd][ff]=='#') dd++; }
else if(s[k]=='D' )
{
dd++;
if( (dd>=0 && dd<n) && (map[dd][ff]>='1' && map[dd][ff]<='7') )
{ a[map[dd][ff]-48]++;
continue;
}
else if(map[dd][ff]=='S')
continue;
else if(map[dd][ff]=='#')
dd--;
}
}
int w=1;
for(i=1; i<=7; i++)
{
if(a[i]==0)
{
w=0;
break;
}
}
if(w==0)
cout<<"No\n";
else
cout<<"Yes\n";
} return 0;
}
 

SDUT OJ 1598 周游列国的更多相关文章

  1. SDUT OJ 2607

    /*http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2607*/ 题目大意:给出一个字符串,求出里 ...

  2. SDUT OJ 1221 亲和数 (找出某个数n所有的因子数,只需要暴力:2->sqrt(n) 即可 )

    亲和数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 如果a的因子和等于b,b的因子和等于a,且a≠b,则称a,b为亲和数对. ...

  3. SDUT OJ 图练习-BFS-从起点到目标点的最短步数 (vector二维数组模拟邻接表+bfs , *【模板】 )

    图练习-BFS-从起点到目标点的最短步数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 在古老的魔兽传说中,有两个军团,一个叫天 ...

  4. 【离散数学】 SDUT OJ 传递闭包 && memset 使用注意事项

    传递闭包 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 已知有n头牛,m次战斗关系, ...

  5. SDUT OJ 2783 小P寻宝记

    #include<iostream> #include<memory.h> #define N 10020 using namespace std; int dp[N],pi[ ...

  6. SDUT oj 3005 打怪升级(内存搜索)

    当比赛一直纠缠骑2如何做一个非常大的数量,数组不开啊...后来他们发现自己很傻啊,该数不超过最大10什么,这个上限就是力量100什么.. .. 其它的就是记忆化搜索啊,还有就是加一点力量的瓶子当时就要 ...

  7. SDUT OJ 2463 学校password你必须学会科学计划

    #include<iostream> #include<string.h> #include<stdio.h> #define N 10010 #define M ...

  8. SDUT oj 2610

    /*题目大意:输入一序列n个数字,然后输入m个询问,每个询问包含左边区间和右边区间,还有a和b,问你这个区间内有几个数大于等于a且小于等于b 做法:树状数组,先求出这个区间内有几个数小于a,然后求这个 ...

  9. SDUT OJ 效率至上(线段树)

    效率至上 Time Limit: 5000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 题意很简单,给出一个数目为n ...

随机推荐

  1. bzoj3211 花神游历各国 线段树,势能分析

    [bzoj3211]花神游历各国 2014年3月17日2,7230 Description   Input   Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input ...

  2. msp430入门学习40

    msp430的其他八 msp430入门学习

  3. hdu1569 方格取数 求最大点权独立集

    题意:一个方格n*m,取出一些点,要求两两不相邻,求最大和.思路:建图,相邻的点有一条边,则建立了一个二分图,求最大点权独立集(所取点两两无公共边,权值和最大),问题转化为求总权和-最小点权覆盖集(点 ...

  4. AC日记——美元汇率 洛谷 P1988

    题目背景 此处省略maxint+1个数 题目描述 在以后的若干天里戴维将学习美元与德国马克的汇率.编写程序帮助戴维何时应买或卖马克或美元,使他从100美元开始,最后能获得最高可能的价值. 输入输出格式 ...

  5. ZOJ 1112 Dynamic Rankings【动态区间第K大,整体二分】

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1112 题意: 求动态区间第K大. 分析: 把修改操作看成删除与增加 ...

  6. SPOJ 26108 TRENDGCD - Trending GCD

    Discription Problem statement is simple. Given A and B you need to calculate S(A,B) . Here, f(n)=n, ...

  7. 注解@RequestMapping value 用法

    本文引自:https://blog.csdn.net/qq_33811662/article/details/80864784 RequestMapping是一个用来处理请求地址映射的注解,可用于类. ...

  8. 8.Java web—JSP基本语法

    1)脚本标识 <%-- <%@这两都之间不能为空格 ,但page前面可以任意空格 --%> <%@ page language="java" content ...

  9. Angular2.X 笔记

    本文为原创,转载请注明出处: cnzt       文章:cnzt-p http://www.cnblogs.com/zt-blog/p/7762590.html 前提: angular-cli (前 ...

  10. 第21章、OnItemSelectedListener事件(从零开始学Android)

    在Android App应用中,OnItemSelectedListener事件也会经常用到,我们一起来了解一下. 基本知识点:OnItemSelectedListener事件 一.界面 1.新建pr ...