【Gym 100971A】Treasure Island
题意
题目链接
给你一个地图,'#'代表水,'.'代表陆地,'?'代表擦去的地图,可能是'#'也可能是'.'。地图中本该只有一块相连的陆地,若只有一种方案则输出确定的地图。若有多种方案,则输出‘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的更多相关文章
- 【Codeforces 494A】Treasure
[链接] 我是链接,点我呀:) [题意] 让你把"#"用至少一个右括号代替 使得整个括号序列合法 [题解] 首先我们不要考虑井号 考虑最简单的括号序列 并且把左括号看成1,右括号看 ...
- 【Codeforces 979B】Treasure Hunt
[链接] 我是链接,点我呀:) [题意] 每次你可以将一个字符变成一个不同于本身的字符. 每个人需要改变n次(且不能不改变) 设每个人的字符串中出现次数最多的字符出现的次数为cnt[0~2] 问你谁的 ...
- 【 Gym 101116K 】Mixing Bowls(dfs)
BUPT2017 wintertraining(15) #4H Gym - 101116K 题意 给定一个菜谱,大写的单词代表混合物,小写的代表基础原料.每个混合物由其它混合物或基础原料组成,不会间接 ...
- 【 Gym - 101124E 】Dance Party (数学)
BUPT2017 wintertraining(15) #4G Gym - 101124 E.Dance Party 题意 有c种颜色,每个颜色最多分配给两个人,有M个男士,F个女士,求至少一对男士同 ...
- 【Gym - 101124A】The Baguette Master (数学,几何)
BUPT2017 wintertraining(15) #4F Gym - 101124A 题意 给定画框宽度,画的四边和一个对角线长度,求画框外沿周长. 题解 过顶点做画框的垂线,每个角都得到两个全 ...
- 【 Gym - 101138K 】 The World of Trains (DP)
BUPT2017 wintertraining(15) #4E Gym - 101138K 题意 N节车厢的火车,每节车厢容量是1~K,那么有\(K^N\)种火车. 求选择D个连续的且容量相同的车厢的 ...
- 【 Gym - 101138J 】Valentina and the Gift Tree(树链剖分)
BUPT2017 wintertraining(15) 4 D Gym - 101138J 数据 题意 n个节点的一棵树,每个节点的权值为g,q个询问,树上的节点U-V,求U到V的路径的最大子段和. ...
- 【 Gym - 101138F 】GukiZ Height (数学)
BUPT2017 wintertraining(15) #4 C Gym - 101138F 题意 初始高度0,目标值h,第i天目标值会下降i,当前高度会改变a[i%n],求高度不小于目标值的最早的时 ...
- 【 Gym - 101138D 】Strange Queries (莫队算法)
BUPT2017 wintertraining(15) #4B Gym - 101138D 题意 a数组大小为n.(1 ≤ n ≤ 50 000) (1 ≤ q ≤ 50 000)(1 ≤ ai ≤ ...
随机推荐
- HDU 3584 Cube --三维树状数组
题意:给一个三维数组n*n*n,初始都为0,每次有两个操作: 1. 翻转(x1,y1,z1) -> (x2,y2,z2) 0. 查询A[x][y][z] (A为该数组) 解法:树状数组维护操作次 ...
- POJ 3321 Apple Tree
树状数组. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cm ...
- 安卓内存不足(删除data/dalvik-cache目录)
alvik-cache alvik-cache名词解释: 在系统data/dalvik-cache文件夹里有很多安装卸载文件(优化过的字节码),这些文件是当你安装好一个应用程序后,系统会自动生成的一个 ...
- NGUI学习笔记汇总
NGUI学习笔记汇总,适用于NGUI2.x,NGUI3.x 一.NGUI的直接用法 1. Attach a Collider:表示为NGUI的某些物体添加碰撞器,如果界面是用NGUI做的,只能这样添加 ...
- ftp虚拟账号登陆
配置使用虚拟用户登录的FTP服务器,可以避免使用操作系统帐号作为FTP用户带来的一些安全问题,也便于通过数据库或其它程序来进行管理.废话不多说,这里记录下ftp虚拟账号登陆的部署过程及其中遇到的问题: ...
- GIT 专贴
1.官网 git-scm.com github.com 代码库 2.源码
- Web的形式发布静态文件
Web的形式发布静态文件 虽然ASP.NET Core是一款"动态"的Web服务端框架,但是在很多情况下都需要处理针对静态文件的请求,最为常见的就是这对JavaScript脚本文件 ...
- 解决SaveChanges会Hold住之前的错误的问题
问题描述: 在一次新增操作中,由于有一个必填字段忘记写了,然后直接点击提交,运行到savechanges的地方,程序报错,提示***字段为必填字段. 然后关掉页面,重新填写一次,这次什么都填写上了,一 ...
- 数据库服务器的安装 (MySQL Server 5.7) :
MySQL 和 MariaDB 都是 Ubuntu 16.04 中的数据库服务器. MySQL Server 和 MariaDB Server的安装包都可以在Ubuntu 的默认软件源中找到,我们可以 ...
- [CareerCup] 3.3 Set of Stacks 多个栈
3.3 Imagine a (literal) stack of plates. If the stack gets too high, it might topple. Therefore, in ...