Inna and Dima

题意:从图上的任意一个D点按着DIMADIMA的顺序走,问一共可以经过多少个DIMA,如果经过0个DIMA就输出“Pool DIma!“,如果可以有无数多个DIMA就输出”Pool Inna!",否则就输出个数。

题解:DFS搜索就好了,这里我刚开的时候思考的是每次从不同的D点是给每个点标记都不同,然后会遇到从一个D点走的不同路并且不产生环的时候无法检查(菜死我了),后面发现如果产生环的时候,4个环的转弯点是方向是一定的,所以只要每次进行dfs的时候标记一下,从这个点退出的时候就把标记清空,这样如果遇到一个标记点就说明有环了。然后还有一个小bug找了半天,就是计数的时候提早一位计数了,没想到cf上只有一个点卡主了,最后自己测了好多次数据才反应过来。

 #include<bits/stdc++.h>
using namespace std;
char str[+][];
bool vis[+][+];
int cnt[+][+];
string DIMA = "DIMA";
int dx[] = {,-,,};
int dy[] = {,,,-};
bool endless = ;
void dfs(int x, int y, int n)
{
if(endless) return ;
n = (n+)%;
int num = ;
for(int i = ; i <= ; i++)
{
int x1 = x + dx[i];
int y1 = y + dy[i];
if(str[x1][y1] == DIMA[n]) //懒到不想判断边界,打死也不相信外面会有DIMA
{
if(vis[x1][y1])
{
endless = ;
return ;
}
else if(!cnt[x1][y1])
{
vis[x1][y1] = ;
dfs(x1,y1,n);
num = max(num, cnt[x1][y1]);
vis[x1][y1] = ;
}
else num = max(num, cnt[x1][y1]);
}
}
if(!cnt[x][y] &&n == ) num++; // 这里的n代表的是下一个”DIMA“的下标
cnt[x][y] = num; //当n变成0了之后其实就代表着这一位是A
return ;
}
int main()
{
int n, m;
scanf("%d%d",&n,&m);
memset(vis, , sizeof(vis));
memset(cnt, , sizeof(cnt));
memset(str, , sizeof(str));
for(int i = ; i <= n; i++)
scanf("%s", str[i]+);
int ans = ;
for(int i = ; i <= n; i++)
{
for(int j = ; j <= m; j++)
if(str[i][j] == 'D' && !cnt[i][j])
{
dfs(i, j, );
ans = max(ans,cnt[i][j]);
}
}
/*for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
printf("%d%c",cnt[i][j]," \n"[j==m]);*/
if(endless) printf("Poor Inna!\n");
else if(ans == ) printf("Poor Dima!\n");
else printf("%d", ans);
return ;
}
/*
5 5
DIMAD
DDDDI
DDDIM
DDDMA
DDDAD
*/

Codeforces 374 C Inna and Dima (DFS)的更多相关文章

  1. cf374C Inna and Dima dfs判环+求最长链

    题目大意是有一个DIMA四种字母组成的矩阵,要在矩阵中找最长的DIMADIMADIMA……串,连接方式为四方向连接,问最长能找到多少DIMA.字母可以重复访问,如果DIMA串成环,即可以取出无限长的D ...

  2. Codeforces 374C - Inna and Dima

    374C - Inna and Dima 思路:dfs+记忆化搜索 代码: #include<bits/stdc++.h> using namespace std; #define ll ...

  3. 【题解】CF374C Inna and Dima

    题面传送门 解决思路 本题是找最长路的图上问题,所以先考虑如何建图. 首先把每一个字母转化为数字,然后对于每一个点枚举四个方向,如果有下一个字母,就向那个点建一条边,可以用 \(vector\) 存图 ...

  4. Codeforces 374 C. Travelling Salesman and Special Numbers (dfs、记忆化搜索)

    题目链接:Travelling Salesman and Special Numbers 题意: 给了一个n×m的图,图里面有'N','I','M','A'四种字符.问图中能构成NIMA这种序列最大个 ...

  5. cf C. Inna and Dima

    http://codeforces.com/contest/374/problem/C 记忆化搜索,题意:求按照要求可以记过名字多少次,如果次数为无穷大,输出Poor Inna!,如果不经过一次输出P ...

  6. codeforces Gym 100187J J. Deck Shuffling dfs

    J. Deck Shuffling Time Limit: 2   Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/pro ...

  7. CodeForces Gym 100500A A. Poetry Challenge DFS

    Problem A. Poetry Challenge Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10 ...

  8. codeforces 580C Kefa and Park(DFS)

    题目链接:http://codeforces.com/contest/580/problem/C #include<cstdio> #include<vector> #incl ...

  9. Educational Codeforces Round 5 - C. The Labyrinth (dfs联通块操作)

    题目链接:http://codeforces.com/contest/616/problem/C 题意就是 给你一个n行m列的图,让你求’*‘这个元素上下左右相连的连续的’.‘有多少(本身也算一个), ...

随机推荐

  1. js 实现 联动

    使用jQuery实现联动效果 应用场景:收货地址 1.准备三个下拉框 <select class="changeArea" id='province'> <opt ...

  2. Java经典编程题

    [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   //这是一个菲波拉契数列问题p ...

  3. 读写properties文件

    1. 读properties文件 Properties props = new Properties(); try { InputStream in = new FileInputStream(&qu ...

  4. .net core 实现基于 cron 表达式的任务调度

    .net core 实现基于 cron 表达式的任务调度 Intro 上次我们实现了一个简单的基于 Timer 的定时任务,详细信息可以看这篇文章. 但是使用过程中慢慢发现这种方式可能并不太合适,有些 ...

  5. 【原创】HashMap复习精讲

    引言 由于近期忙着搬家,又偷懒了几个礼拜! 其实我很早以前就想写一篇关于HashMap的面试专题.对于JAVA求职者来说,HashMap可谓是集合类的重中之重,甚至你在复习的时候,其他集合类都不用看, ...

  6. PyCharm如何导入python项目

    Pycharm导入python项目 进入PyCharm后,点击File→Open,然后在弹窗中选择需要导入项目的文件夹: 打开了python项目后,需要配置该项目对应的python才可以正常运行: 配 ...

  7. zookeeper 集群配置

    安装前要先确保配置好 jdk,这里不在讲述 一. 将zookeeper 安装包下载到你想要的目录 下载地址:http://mirrors.hust.edu.cn/apache/zookeeper/ m ...

  8. 转载 | SVG向下兼容优雅降级方法

    本文引自:http://www.zhangxinxu.com/wordpress/2013/09/svg-fallbacks/ 1.svg image标签降级技术 <svg width=&quo ...

  9. Promise对象的resolve回调函数和reject回调函数使用

    Promise是ES6中用来结局回调地狱的问题的但是并不能帮我们减少代码量 Promise是一个构造函数 new Promise() 得到一个Promise一个实例 在Promise上有两个函数分别是 ...

  10. Tomcat源码分析 (六)----- Tomcat 启动过程(一)

    说到Tomcat的启动,我们都知道,我们每次需要运行tomcat/bin/startup.sh这个脚本,而这个脚本的内容到底是什么呢?我们来看看. 启动脚本 startup.sh 脚本 #!/bin/ ...