题目描述

萨丽·斯内尔(Sally Snail,蜗牛)喜欢在N x N 的棋盘上闲逛(1 < n <= 120)。

她总是从棋盘的左上角出发。棋盘上有空的格子(用“.”来表示)和B 个路障(用“#”来表示)。

下面是这种表示法的示例棋盘:

萨丽总是垂直(向上或者向下)或水平(向左或者向右)地走。她可以从出发地(总是记作A1 )向下或者向右走。一旦萨丽选定了一个方向,她就会一直走下去。如果她遇到棋盘边缘或者路障,她就停下来,并且转过90 度。她不可能离开棋盘,或者走进路障当中。并且,萨丽从不跨过她已经经过的格子。当她再也不能走的时候,她就停止散步。

这里是上面的棋盘上的一次散步路线图示:

萨丽向右走,再向下,向右,向下,然后向左,再向上,最后向右走。这时她遇到了一个她已经走过的格子,她就停下来了。但是,如果她在F5 格遇到路障后选择另外一条路——向我们看来是左边的方向转弯,情况就不一样了。

你的任务是计算并输出,如果萨丽聪明地选择她的路线的话,她所能够经过的最多格子数。

输入输出格式

输入格式:

输入的第一行包括N —棋盘的大小,和B —路障的数量(1 <= B <= 200)。接下来的B 行包含着路障的位置信息。下面的样例输入对应着上面的示例棋盘。下面的输出文件表示问题的解答。注意,当N > 26 时,输入文件就不能表示Z 列以后的路障了。(这句话不用专门理他。其实就是从A 的ascii 码开始向后顺延,不管是什么字母就行了。)

输出格式:

输出文件应该只由一行组成,即萨丽能够经过的最多格子数。

输入输出样例

输入样例#1:

8 4
E2
A6
G1
F5
输出样例#1:

33

说明

题目翻译来自NOCOW。

USACO Training Section 5.2

思路:爆搜。

错因:不知道为什么,用scanf就是错,最多只能得40分,改成cin就AC了,求大佬帮忙找找错。

40分代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
char s[];
int dx[]={,,,-};
int dy[]={,,-,};
int n,b,ans=-,map[][],walk[][];
void dfs(int x,int y,int step,int pre){
int cx=x+dx[pre];
int cy=y+dy[pre];
if(walk[cx][cy]){
ans=max(ans,step);
return ;
}
if(cx<||cx>n||cy<||cy>n||map[cx][cy]){
for(int i=;i<;i++){
cx=x+dx[i];
cy=y+dy[i];
if(cx>=&&cx<=n&&cy>=&&cy<=n&&!map[cx][cy]&&!walk[cx][cy]){
walk[cx][cy]=;
dfs(cx,cy,step+,i);
walk[cx][cy]=;
}
}
ans=max(ans,step);
return ;
}
ans=max(ans,step);
walk[cx][cy]=;
dfs(cx,cy,step+,pre);
walk[cx][cy]=;
}
int main(){
scanf("%d%d",&n,&b);
for(int i=;i<=b;i++){
scanf("%s",s);
int y=s[]-'A'+;
int x=s[]-'';
map[x][y]=;
}
walk[][]=;
dfs(,,,);
dfs(,,,);
cout<<ans+;
}

AC代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int dx[]={,,,-};
int dy[]={,,-,};
int n,b,ans=-,map[][],walk[][];
void dfs(int x,int y,int step,int pre){
int cx=x+dx[pre];
int cy=y+dy[pre];
if(walk[cx][cy]){
ans=max(ans,step);
return ;
}
if(cx<||cx>n||cy<||cy>n||map[cx][cy]){
for(int i=;i<;i++){
cx=x+dx[i];
cy=y+dy[i];
if(cx>=&&cx<=n&&cy>=&&cy<=n&&!map[cx][cy]&&!walk[cx][cy]){
walk[cx][cy]=;
dfs(cx,cy,step+,i);
walk[cx][cy]=;
}
}
ans=max(ans,step);
return ;
}
ans=max(ans,step);
walk[cx][cy]=;
dfs(cx,cy,step+,pre);
walk[cx][cy]=;
}
int main(){
scanf("%d%d",&n,&b);
char x;int y;
for(int i=;i<=b;i++){
cin>>x>>y;
map[y][x-'A'+]=;
}
walk[][]=;
dfs(,,,);
dfs(,,,);
cout<<ans+;
}

洛谷 P1560 [USACO5.2]蜗牛的旅行Snail Trails(不明原因的scanf错误)的更多相关文章

  1. 洛谷——P1560 [USACO5.2]蜗牛的旅行Snail Trails

    P1560 [USACO5.2]蜗牛的旅行Snail Trails 题目描述 萨丽·斯内尔(Sally Snail,蜗牛)喜欢在N x N 的棋盘上闲逛(1 < n <= 120). 她总 ...

  2. 洛谷 P1560 [USACO5.2]蜗牛的旅行Snail Trails

    题目链接 题解 一看题没什么思路.写了个暴力居然可过?! Code #include<bits/stdc++.h> #define LL long long #define RG regi ...

  3. [USACO5.2]蜗牛的旅行Snail Trails(有条件的dfs)

    题目描述 萨丽·斯内尔(Sally Snail,蜗牛)喜欢在N x N 的棋盘上闲逛(1 < n <= 120). 她总是从棋盘的左上角出发.棋盘上有空的格子(用“.”来表示)和B 个路障 ...

  4. 洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication【最小割】分析+题解代码

    洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication[最小割]分析+题解代码 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流. ...

  5. 洛谷P1522 [USACO2.4]牛的旅行 Cow Tours

    洛谷P1522 [USACO2.4]牛的旅行 Cow Tours 题意: 给出一些牧区的坐标,以及一个用邻接矩阵表示的牧区之间图.如果两个牧区之间有路存在那么这条路的长度就是两个牧区之间的欧几里得距离 ...

  6. [洛谷P2747] [USACO5.4]周游加拿大Canada Tour

    洛谷题目链接:[USACO5.4]周游加拿大Canada Tour 题目描述 你赢得了一场航空公司举办的比赛,奖品是一张加拿大环游机票.旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行, ...

  7. [洛谷P2750] [USACO5.5]贰五语言Two Five

    洛谷题目链接:[USACO5.5]贰五语言Two Five 题目描述 有一种奇怪的语言叫做"贰五语言".它的每个单词都由A-Y这25个字母各一个组成.但是,并不是任何一种排列都是一 ...

  8. [洛谷P1709] [USACO5.5]隐藏口令Hidden Password

    洛谷题目链接:[USACO5.5]隐藏口令Hidden Password 题目描述 有时候程序员有很奇怪的方法来隐藏他们的口令.Binny会选择一个字符串S(由N个小写字母组成,5<=N< ...

  9. [洛谷P2745] [USACO5.3]窗体面积Window Area

    洛谷题目链接:[USACO5.3]窗体面积Window Area 题目描述 你刚刚接手一项窗体界面工程.窗体界面还算简单,而且幸运的是,你不必显示实际的窗体.有 5 种基本操作: 创建一个新窗体 将窗 ...

随机推荐

  1. PCB 无需解压,直接读取Genesis TGZ指定文件 实现方法

    通过无需解压读取ZIP压缩包的方法,寻思者如何可以不解压直接读Genesis TGZ文件内容, 通过查找资料,原来可以通过:SharpCompress.dll工具实现此需求,此工具如此NB 一.Sha ...

  2. PCB WCF Web接口增减参数后,在客户端不更新的情况,是否影响客户端,评估测试

    1.目的:由于接口众多,服务端变更接口,会造成服务停用更新,造成客户端不能使用或报错, 在此评估[Web中心]此服务端,接口接口参数增加或减少,是否对客户端造成影响 2.评估内容:服务端增加单值参数, ...

  3. day-05 python函数

    # #-*- coding:utf-8 -*-# 1:编写一个名为 make_shirt()的函数,它接受一个尺码以及要印到 T 恤上的字样.这个函数应打印一个句子,概要地说明 T 恤的尺码和字样.d ...

  4. lowbit( )运算

    --------开始-------- lowbit (n) 定义为非负整数n在二进制表示下“最低位的1及其后面所有的0构成的数值. 比如: n = 10 的二进制下为1010,则lowbit (n) ...

  5. pdf 转成 一张图片

    1.maven依赖 <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfb ...

  6. Redis hash结构 和常用命令

    Redis 数据结构 -- 哈希 hash 是 一个 String 类型的field 和 value 的映射表 hash 的键值 对在内存中的一种无序的状态 命令 说明 备注 hdel key fie ...

  7. Tomcat 程序无问题的情况下页面打开变慢的原因

    看看这写日志的频率就知道我有多闲了.. 前言: 其实关于tomcat,遇到过很多关于“慢”的问题,比如启动慢,比如页面打开慢, 以前太忙也太懒,不愿意花时间分析原因,现在终于肯静下来找原因 环境是ec ...

  8. Django学习案例一(blog):五. 开发主页(博客列表展示)

    主页是一个“博客列表”页.博客要按发布时间的倒序来排列,每个博客都要包含标题.作者.分类.发布时间的显示(年-月-日 时:分)及节选的正文内容(前 100 个字).点击单独的博客可以进入其详情页. 1 ...

  9. intellij IDEA常见操作

    1.中文乱码设置:file - setting - Editor - File Encodings 设置为UTF-8 2.tomcat重新启动:Ctrl-F5,或者左上角 3.删除progect 先c ...

  10. Leetcode0092 & 0206--Reverse Linked List 链表逆转

    [转载请注明]http://www.cnblogs.com/igoslly/p/8670038.html 链表逆序在链表题目中还是较为常见的,这里将Leetcode中的两道题放在一起,分别是 0092 ...