题意

题目链接
给你一个地图,'#'代表水,'.'代表陆地,'?'代表擦去的地图,可能是'#'也可能是'.'。地图中本该只有一块相连的陆地,若只有一种方案则输出确定的地图。若有多种方案,则输出‘Ambiguous’,若无答案,则输出‘Impossible’。

分析

将所有‘.’进行dfs扫一遍,dfs时遇到的‘?’当作'.',因为被'#'包围的'?'一定代表‘#’。
一边记录相连的陆地数量b,一边记录当前相连陆地的总格数s0。
如果b==1,就对每个遇到过的'?',将其置为'#‘,再dfs一遍,如果扫到总格数小于s0-1,则有多种答案,否则就是一种答案。
如果b>1,则是无答案。

代码

#include <bits/stdc++.h>
#define N 55
int n, m, a[N][N], u[N][N], x, y, b, s0, s, ok, fx[] = {, , , -}, fy[] = {, -, , };
char c;
void dfs(int x, int y)
{
if (u[x][y]) return;
u[x][y] = ;
s++;
if (a[x][y] == ) a[x][y] = ;
for (int i = ; i < ; i++)
{
int nx = x + fx[i];
int ny = y + fy[i];
if (a[nx][ny])
dfs(nx, ny);
}
}
int main()
{
scanf("%d%d ", & n, & m);
for (int i = ; i <= n; i++)
{
for (int j = ; j <= m; j++)
{
c = getchar();
if (c == '.') a[i][j] = ;
else if (c == '?') a[i][j] = ;
}
getchar();
}
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
if (a[i][j] == && !u[i][j])
{
b++;
dfs(i, j);
x = i;
y = j;
}
if(b == )
{
s0 = s;
for (int i = ; i <= n && !ok; i++)
for (int j = ; j <= m && !ok; j++)
if (a[i][j] == )
{
memset(u, , sizeof u);
s = a[i][j] = ;//? => #
dfs(x, y);
if(s == s0 - )
ok = ;
a[i][j] = ;
}
if (ok)
printf("Ambiguous");
else
for (int i = ; i <= n; i++)
{
for (int j = ; j <= m; j++)
if (a[i][j] == ) printf(".");
else printf("#");
printf("\n");
}
}
else printf("Impossible");
return ;
}

【Gym 100971A】Treasure Island的更多相关文章

  1. 【Codeforces 494A】Treasure

    [链接] 我是链接,点我呀:) [题意] 让你把"#"用至少一个右括号代替 使得整个括号序列合法 [题解] 首先我们不要考虑井号 考虑最简单的括号序列 并且把左括号看成1,右括号看 ...

  2. 【Codeforces 979B】Treasure Hunt

    [链接] 我是链接,点我呀:) [题意] 每次你可以将一个字符变成一个不同于本身的字符. 每个人需要改变n次(且不能不改变) 设每个人的字符串中出现次数最多的字符出现的次数为cnt[0~2] 问你谁的 ...

  3. 【 Gym 101116K 】Mixing Bowls(dfs)

    BUPT2017 wintertraining(15) #4H Gym - 101116K 题意 给定一个菜谱,大写的单词代表混合物,小写的代表基础原料.每个混合物由其它混合物或基础原料组成,不会间接 ...

  4. 【 Gym - 101124E 】Dance Party (数学)

    BUPT2017 wintertraining(15) #4G Gym - 101124 E.Dance Party 题意 有c种颜色,每个颜色最多分配给两个人,有M个男士,F个女士,求至少一对男士同 ...

  5. 【Gym - 101124A】The Baguette Master (数学,几何)

    BUPT2017 wintertraining(15) #4F Gym - 101124A 题意 给定画框宽度,画的四边和一个对角线长度,求画框外沿周长. 题解 过顶点做画框的垂线,每个角都得到两个全 ...

  6. 【 Gym - 101138K 】 The World of Trains (DP)

    BUPT2017 wintertraining(15) #4E Gym - 101138K 题意 N节车厢的火车,每节车厢容量是1~K,那么有\(K^N\)种火车. 求选择D个连续的且容量相同的车厢的 ...

  7. 【 Gym - 101138J 】Valentina and the Gift Tree(树链剖分)

    BUPT2017 wintertraining(15) 4 D Gym - 101138J 数据 题意 n个节点的一棵树,每个节点的权值为g,q个询问,树上的节点U-V,求U到V的路径的最大子段和. ...

  8. 【 Gym - 101138F 】GukiZ Height (数学)

    BUPT2017 wintertraining(15) #4 C Gym - 101138F 题意 初始高度0,目标值h,第i天目标值会下降i,当前高度会改变a[i%n],求高度不小于目标值的最早的时 ...

  9. 【 Gym - 101138D 】Strange Queries (莫队算法)

    BUPT2017 wintertraining(15) #4B Gym - 101138D 题意 a数组大小为n.(1 ≤ n ≤ 50 000) (1 ≤ q ≤ 50 000)(1 ≤ ai ≤  ...

随机推荐

  1. 二分图最大匹配算法-Hopcroft-Karp模板

    时间复杂度:O((√V)*E) #include<stdio.h> #include<string.h> ,M=,INF=0x3f3f3f3f; int dx[N],dy[M] ...

  2. java8-3 多态的好处和弊端以及多态的理解

    多态的好处: A:提高了代码的维护性(继承保证) B:提高了代码的扩展性(由多态保证) 猫狗案例代码 class Animal { public void eat(){ System.out.prin ...

  3. EventBus (三) 源码解析 带你深入理解EventBus

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40920453,本文出自:[张鸿洋的博客] 上一篇带大家初步了解了EventBus ...

  4. Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换

    转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17718579),请尊重他人的辛勤劳动成果,谢谢! 在And ...

  5. js定时器的一些小问题

    1 js中定时器分为两种:setInterval和setTimeout, 但是在代码的执行中,定时器的优先级最低,系统里其他不在执行的时候,它才开始.例子如下: 2 3 <script> ...

  6. ABP入门系列(6)——展现层实现增删改查

    这一章节将通过完善Controller.View.ViewModel,来实现展现层的增删改查.最终实现效果如下图: 一.定义Controller ABP对ASP.NET MVC Controllers ...

  7. PHP中的魔术变量

    PHP中的常量大部分都是不变的,但是有8个常量会随着他们所在代码位置的变化而变化,这8个常量被称为魔术常量. 名称 说明 __LINE__ 文件中的当前行号. __FILE__ 文件的完整路径和文件名 ...

  8. PHP5.5 + IIS + Win7的配置

    PHP运行环境主要分windows环境和linux环境,本文主要简单介绍下我自己的配置,其他就不一一说明了. windows环境 方式一:.Apache的安装配置:2.MySQL的安装配置,可安装ph ...

  9. linux下的zip命令

    1.把/home目录下面的mydata目录压缩为mydata.zipzip -r mydata.zip mydata #压缩mydata目录2.把/home目录下面的mydata.zip解压到myda ...

  10. MySQL基础 - 编码设置

    刚开始工作的时候,在工作中遇到的与数据库相关的问题,多半跟编码有关,总结一下数据库编码的设置. 字符集 查看数据库支持的字符集: mysql> SHOW CHARACTER SET; 从图中可以 ...