NBUT1541 Rainwater 题解
http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1541
|
When rain, nocLyt discovered a magical phenomenon that the rainwater always flow to the low-lying place. |
我以后都在题解里放一小段题目,让人更容易搜到,有没有很有想法!(咦这样好像放全部的题目更容易被搜到啊)(不过那样好像比较乱啊)
[] Rainwater
时间限制: ms 内存限制: K
问题描述
When rain, nocLyt discovered a magical phenomenon that the rainwater always flow to the low-lying place. Now, there is a N * N grid matrix (four Unicom) and above the first row was constantly raining. I have to tell you some rules: . Each grid is solid (represented as black) initially, the rain cannot flow into the solid grid. . You can "Open" a grid, if you "Open" that grid, that grid will becomes hollow (represented as white). . Rainwater can flow from top to bottom and from left to right (also right to left), but the precondition is that they are both hollow grid. (grid fill with rainwater represented as blue) You can get more information from below picture. Figure: from left to right are executed times, times, times, times "Open" operation. We have three operation: . O i j: "Open" the grid (i, j). . F i j: You should tell me whether the grid(i, j) filled with rainwater. If yes, you should output , otherwise output . . C: You should tell me whether the rainwater has flow to the last row. If yes, you should output , otherwise output . Note: The grid matrix from top to bottom number to N, from left to right number to N. 输入
There are multiple test cases, each test case contains two positive integers N ( <= N <= ) and M ( <= M <= ).
Following M lines, each line contain one of the three operation:
. O i j ( <= i, j <= N)
. F i j ( <= i, j <= N)
. C 输出
Output the answer.
样例输入 O
F
O
F
C
O
C
样例输出 提示
无来源
nocLyt @SDAU
题目
我把题目隐藏成一行,这样就不乱,而且好像也能被搜到。不过这样格式有点逗,要看题目还是点链接去看好了。
好下面来说这题Rainwater:
看图比较容易懂意思,就是你的三种操作是开某个孔,查某个孔有没有进水,查最下面一行有没有水。水会从最上面一行出现,然后随便乱流,看最后一个图可以知道它会往上流。
看完题目,这不就是超水的深搜吗!
把地图从1开始,第0行先灌满水。每次开一块的时候,如果四个方向没水,那这一块肯定没水。如果有水,那就把这格填上水,并且深搜一波,把能到的地方都水了。这样每格最多水一次,复杂度超低。然后它询问某个孔的时候就直接答,询问最下面这行的话也直接答,搜的时候记得记最下面这行有没有水,不要在查的时候才查一整行,这个可是要问100W个问题的,地图只有5000*5000,最下面那一行有5000个格子啊,你敢每次搜一下吗!
总之就是搜就过啦,深搜王,我咧哇纳鲁!
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define ll long long
const int MAXN=;
const int gx[]={,,-,};
const int gy[]={-,,,};
int a[MAXN][MAXN];
int n,m,flagc; void dfs(int x,int y)
{
int i;
a[x][y]=;
if(x==n) flagc=;
for(i=;i<;i++)
if(a[x+gx[i]][y+gy[i]]==) dfs(x+gx[i],y+gy[i]);
} void open(int x,int y)
{
int i,j;
if(a[x][y]!=) return;
a[x][y]=;
for(i=;i<;i++)
if(a[x+gx[i]][y+gy[i]]==){a[x][y]=;break;}
if(a[x][y]==) return;
dfs(x,y);
} int main()
{
char c;
int x,y,i;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(a,,sizeof(a));
for(i=;i<=n;i++)
a[][i]=;
flagc=;
for(i=;i<m;i++)
{
//cout<<i<<"!"<<endl;
do{scanf("%c",&c);}while(c=='\n' || c==' ');
if(c!='C')
{
scanf("%d%d",&x,&y);
if(c=='O') open(x,y);
else if (c=='F')
{
printf("%d\n",a[x][y]==);
}
}
else
{
printf("%d\n",flagc);
}
}
}
return ;
}
NBUT1541 Rainwater 题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- WindowsService(Windows服务)开发步骤附Demo
1.打开VS,新建项目,选择Windows服务,然后设置目录及项目名称后点击确定. 2.展开Service1服务文件,编写service1.cs类文件,不是Service1[设计].然后修改OnSta ...
- Chrome扩展开发之一——Chrome扩展的文件结构
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- JavaScript split() 方法
split() 方法用于把一个字符串分割成字符串数组.
- 标准I/O
在程序运行时,会默认为我们打开三个流:标准输入流.标准输出流.标准出错流. 标准输入流一般对应我们的键盘 标准输出流一般对应显示器 标准出错流一般也对应显示器 1.标准输入流 在标准I/O中,java ...
- [C#]exchange发送,收件箱操作类
最近项目中需要用到exchange的操作,就参照msdn弄了一个简单的操作类.目前先实现了,发送邮件和拉取收件箱的功能,其他的以后在慢慢的添加. using Microsoft.Exchange.We ...
- Ubuntu下vim的配置
由于刚开始学习Linux,对佷多操作还不熟悉,遇到了一些困难,在这里记录一下. 1 安装vim.俺我现在的理解,vim有控制台版本和GUI版本.控制台版本貌似是Ubuntu自带的,可以在终端输入 v ...
- linux用终端上传文件和文件家到远程的服务器
文件上传:scp 本地文件地址 root@aifei8.net:/var/www/html/landrover 文件夹上传:1.先进入文件夹目录 2. 执行命令:scp -r . root@aifei ...
- 微信内置浏览器的JsAPI(WeixinJSBridge续)[转载]
原文地址: http://www.baidufe.com/item/f07a3be0b23b4c9606bb.html 之前有写过几篇关于微信内置浏览器(WebView)中特有的Javascript ...
- 每天一个linux命令(34):kill命令
Linux 中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以 使用Ctrl+C键,但是,对于一个后台进程 ...
- 每天一个linux命令(21):tar命令
通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大. tar 命令可以为linu ...