【CodeVS3100】蜗牛

Description

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

  A B C D E F G H
1 S . . . . . # .
2 . . . . # . . .
3 . . . . . . . .
4 . . . . . . . .
5 . . . . . # . .
6 # . . . . . . .
7 . . . . . . . .
8 . . . . . . . .

萨丽总是垂直(向上或者向下)或水平(向左或者向右)地走。她可以从出发地(总是记作 A1 )向下或者向右走。

一旦萨丽选定了一个方向,她就会一直走下去。如果她遇到棋盘边缘或者路障,她就停下来,并且转过 90 度。她不可能离开棋盘,或者走进路障当中。并且,萨丽从不跨过她已经经过的格子。当她再也不能走的时候,她就停止散步。

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

  A B C D E F G H
1 S---------+ # .
2 . . . . # | . .
3 . . . . . | . .
4 . . . . . +---+
5 . . . . . # . |
6 # . . . . . . |
7 +-----------+ |
8 +-------------+

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

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

Input

(file snail.in)

输入的第一行包括 N ——棋盘的大小,和 B ——路障的数量(1 <= B <= 200)。接下来的 B 行包含着路障的位置信息。下面的样例输入对应着上面的示例棋盘。下面的输出文件表示问题的解答。注意,当 N 〉26 时,输入文件就不能表示 Z 列以后的路障了。(ps:这句话的理解请参见题解 //from Error)

Output

(file snail.out)

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

Sample Input

8 4
E2
A6
G1
F5

Sample Output

33

样例说明

  A B C D E F G H
1 S . . . . . # .
2 | . . . # . . .
3 | . . . +-----+
4 | . . . | . . |
5 +-------+ # . |
6 # . . . . . . |
7 +------------ |
8 +-------------+

题解

dfs,注意有两位数,不能这样读入!!

for (int i=1;i<=m;i++)
    {
        cin>>ch1>>ch2;
        mp[ch2-‘0‘][ch1-‘A‘+1] = 1;
    }

呜呜呜调了一下午

/*
    0 1     3
    2
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 200
using namespace std;
int mp[N][N];
bool vis[N][N];
int mv[2][4];
int n,m,ans;
char s[100];
bool pd(int x,int y)
{
    if (x && x<=n && y && y<=n && (mp[x][y] == 0)) return 1;
    return 0;
}
void dfs(int x,int y,int z,int step)
{
    if (vis[x][y]) return ;
    vis[x][y] = true;
    if (step>ans) ans = step;
    int rx = x+mv[0][z], ry = y+mv[1][z];
    if (pd(rx,ry)==0 || mp[rx][ry])
    {
        if (z == 0 || z == 2)
        {
            if (pd(x,y-1) && (mp[x][y-1]==0)) dfs(x,y-1,1,step+1);//left
            if (pd(x,y+1) && (mp[x][y+1]==0)) dfs(x,y+1,3,step+1);//right
        }
        else
        {
            if (pd(x-1,y) && (mp[x-1][y]==0)) dfs(x-1,y,0,step+1);//up
            if (pd(x+1,y) && (mp[x+1][y]==0)) dfs(x+1,y,2,step+1);//down
        }
    }
    else dfs(rx,ry,z,step+1);
    vis[x][y] = false;
}
int main()
{

    scanf("%d%d",&n,&m);
    for (int i=1;i<=m;i++)
    {
        cin>>s;
        int y=s[0]-64;
        int x=0;
        for(int j=1;j<=strlen(s)-1;j++)
          if(s[j]>=‘0‘&&s[j]<=‘9‘)
          x=x*10+s[j]-‘0‘;
        mp[x][y] = 1;
    }
    mv[0][0] = -1;    mv[0][2] = 1;    mv[1][1] = -1;    mv[1][3] = 1;
    dfs(1,1,2,1);
    memset(vis,0,sizeof(vis));
    dfs(1,1,3,1);
    printf("%d\n",ans);
}
时间: 2024-09-29 08:48:16

【CodeVS3100】蜗牛的相关文章

蜗牛—实体类与数据表的映射文件

Hibernate框架可以根据你写的映射文件直接对你的实体类进行增删改查等等数据库操作.传入的可以是一个实体对象. 首先是我的实体类代码 Position.java package com.attence.entity; public class Position { private int id; private String position_Name; private String desc; public int getId() { return id; } public void se

杭电ACM 蜗牛出井

Problem Description A snail is at the bottom of a 6-foot well and wants to climb to the top. The snail can climb 3 feet while the sun is up, but slides down 1 foot at night while sleeping. The snail has a fatigue factor of 10%, which means that on ea

蜗牛—Hibernate之初识配置

下载Hibernate的jar包 把以下jar文件考到项目lib下 然后在myeclipse中打开database的view视图创建一个新的数据库连接 接下来,配置连接,需要导入ORACLE的jar包 我创建的连接名为wjj 然后在项目中加入Hibernate的配置信息,可以用刚才创建的数据库连接用myeclipse生成 首先,点击项目右键 接下来,需要把那些划红线的东西勾掉 next next,,DB Driver用刚才创建的数据库连接即可 最后,勾掉此选项 最后在项目的src项目里产生此文件

蜗牛—Hibernate之自写固定组件

Hibernate的存储都是在session中进行的,此session非彼session 下面就是从生成的Hibernate配置文件获得连接数据库,然后再得到session等等 package com.attence.tools; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateSessi

蜗牛—JavaScript学习之鼠标滑过与离开

鼠标划过,图片会变,离开又回复到初识状态 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http

Async in C# 5.0(C#中的异步编程Async) 蜗牛翻译之第一章

p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提高下英文,用我拙劣的英文翻译一些重要的部分,纯属娱乐,简单分享,保持学习,谨记谦虚. 如果你觉得这件事儿没意义翻译的又差,尽情的踩吧.如果你觉得值得鼓励,感谢留下你的赞,祝各位爱技术的园友在今后每一次应该猛烈突破的时候,不选择知难而退.在每一次应该独立思考的时候,不选择随波逐流,应该全力以赴的时候,不选择尽力

蜗牛爱课- iOS中plist的创建,数据写入与读取

iOS中plist的创建,数据写入与读取功能创建一个test.plist文件-(void)triggerStorage{    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);    NSString *path=[paths    objectAtIndex:0];      NSString *filename=[path stringByAppendin

蜗牛历险记(二) Web框架(中)

上篇简单介绍了框架所使用的Autofac,采用Autofac提供的Ioc管理整个Web项目中所有对象的生命周期,实现框架面向接口编程.接下来介绍框架的日志系统. 一.介绍之前 框架日志是否有存在的必要性?假如你认为你的框架永远不会出现Bug,或者你能根据错误提示就能还原现场,重现这个问题,那你不需要日志.目前看来这样的项目不存在(Helloworld之类除外).因此日志框架还是很必要的. 日志框架用于记录:系统运行过程中错误详情:用于记录系统使用过程中产生的意外情况:用于记录系统一些状态信息等等

问蜗牛的环境是怎么样的?本人是学的是C++,

我是一个大四的学生通过笔面过了去蜗牛实习,想问问蜗牛的环境是怎么样的?本人是学的是C++,在达内培训过的.还请知道的人告诉下,谢谢. 605la 123cz 395yd 912up 585ey 235jr 261ic 399io 362tt 220fw 794ut 081fp 871cw 103qo 280ux 089kt 455ns 667wo 433jp 492qp 343gq 688dg 640to 363si 021ul 673zl 831lq 055iz 530xe 646kd 328