SDUT OJ 1598 周游列国
周游列国
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 周游列国的更多相关文章
- SDUT OJ 2607
/*http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2607*/ 题目大意:给出一个字符串,求出里 ...
- SDUT OJ 1221 亲和数 (找出某个数n所有的因子数,只需要暴力:2->sqrt(n) 即可 )
亲和数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 如果a的因子和等于b,b的因子和等于a,且a≠b,则称a,b为亲和数对. ...
- SDUT OJ 图练习-BFS-从起点到目标点的最短步数 (vector二维数组模拟邻接表+bfs , *【模板】 )
图练习-BFS-从起点到目标点的最短步数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 在古老的魔兽传说中,有两个军团,一个叫天 ...
- 【离散数学】 SDUT OJ 传递闭包 && memset 使用注意事项
传递闭包 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 已知有n头牛,m次战斗关系, ...
- SDUT OJ 2783 小P寻宝记
#include<iostream> #include<memory.h> #define N 10020 using namespace std; int dp[N],pi[ ...
- SDUT oj 3005 打怪升级(内存搜索)
当比赛一直纠缠骑2如何做一个非常大的数量,数组不开啊...后来他们发现自己很傻啊,该数不超过最大10什么,这个上限就是力量100什么.. .. 其它的就是记忆化搜索啊,还有就是加一点力量的瓶子当时就要 ...
- SDUT OJ 2463 学校password你必须学会科学计划
#include<iostream> #include<string.h> #include<stdio.h> #define N 10010 #define M ...
- SDUT oj 2610
/*题目大意:输入一序列n个数字,然后输入m个询问,每个询问包含左边区间和右边区间,还有a和b,问你这个区间内有几个数大于等于a且小于等于b 做法:树状数组,先求出这个区间内有几个数小于a,然后求这个 ...
- SDUT OJ 效率至上(线段树)
效率至上 Time Limit: 5000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 题意很简单,给出一个数目为n ...
随机推荐
- bzoj2648/2716 kdtree
SJY摆棋子 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 5199 Solved: 1813[Submit][Status][Discuss] D ...
- [MFC] TabControl选项卡的使用
MFC中,因项目需要使用TabControl ,使用过程中发现,MFC中的TabControl与C#的TabControl不同,不能通过属性来创建选项页,只能代码生成绑定. 以下为具体的实现方法步骤: ...
- R语言入门视频笔记--3-1--矩阵与数组
生成一个新矩阵,多用一些参数吧这次: x <- c(12,13,14,15) rname <- c("R1","R2") nname <- c ...
- Yii 之视图
控制器方法代码: public function actionIndex(){ $data = array( 'name' => 'zhangsan', 'age' => 12, 'add ...
- laravel 操作数据库
建立student控制器,控制器代码 namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; class StudentC ...
- NSArray,NSMutableArray的一些常用方法
不可变数组 ——NSArray 常用的初始化一个数组: NSArray *array1 = [[NSArray alloc] init]; NSArray *array2 = ...
- VirtualBox 5.0.10 中 Fedora 23 在安装了增强工具后无法自动调节虚拟机分辨率的问题(改)
VirtualBox 5.0.10 中安装 Fedora 23,即使在安装了增强工具后,仍然会发现虚拟机无法根据 VirtualBox 的运行窗口大小自动进行分辨率调节.究其原因,主要是因为 Fedo ...
- SpringCloud-Eureka注册中心
什么是微服务,分布式? 分布式:不同的模块部署在不同的服务器上,可以更好的解决网站高并发. 微服务:架构设计概念,各服务间隔离(分布式也是隔离),自治(分布式依赖整体组合)其它特性(单一职责,边界,异 ...
- 关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)
原文:http://www.open-open.com/code/view/1446195787257 package cn.outofmemory.codes.Date; import java.u ...
- flask的debug模式下,网页输入pin码进行调试
网站后端Python+Flask .FLASK调试模式之开启DEBUG与PIN使用? 自动加载: # 方式一 1 2 if __name__ == '__main__': app.run(ho ...