Problem Description
Given a rectangle frame of size n×m. Initially, the frame is strewn with n×m square blocks of size 1×1. Due to the friction with the frame and each other, the blocks are stable and will not drop.

However, the blocks can be knocked down. When a block is knocked down, other remaining blocks may also drop since the friction provided by other remaining blocks may not sustain them anymore. Formally, a block will drop if it is knocked or not stable, which means that at least one of the left block and the right block has been dropped and at least one of the front block and the back block has been dropped. Especially, the frame can be regarded as a huge stable block, which means that if one block's left is the frame, only when its right block has been dropped and at least one of the front block and the back block has been dropped can it drop. The rest situations are similar.

Now you, the block breaker, want to knock down the blocks. Formally, you will do it q times. In each time, you may choose a position (xi,yi). If there remains a block at the chosen position, you will knock it down; otherwise, nothing will happen. Moreover, after knocking down the block, you will wait until no unstable blocks are going to drop and then do the next operation.

For example, please look at the following illustration, the frame is of size 2×2 and the block (1,1) and (1,2) have been dropped. If we are going to knock the block (2,2), not only itself but also the block (2,1) will drop in this knocking operation.

You want to know how many blocks will drop in total in each knocking operation. Specifically, if nothing happens in one operation, the answer should be regarded as 0.

Input
The first line contains one positive integer T (1≤T≤10), denoting the number of test cases.

For each test case:

The first line contains three positive integers n,m and q (1≤n,m≤2000,1≤q≤100000), denoting the sizes in two dimensions of the frame and the number of knocking operations.

Each of the following q lines contains two positive integers xi and yi (1≤xi≤n,1≤yi≤m), describing a knocking operation.

Output
For each test case, output q lines, each of which contains a non-negative integer, denoting the number of dropped blocks in the corresponding knocking operation.

Sample Input
2
2 2 3
1 1
1 2
2 2
4 4 6
1 1
1 2
2 1
2 2
4 4
3 3

Sample Output
1
1
2
1
1
2
0
1
11

递归求解,不过注意一定要使用scanf,printf;如果使用cin,cout一定会超时的,刚开始我就是这样显示超时。
AC代码:

include

include

using namespace std;
int a[2005][2005],n,m,q,s;
int d[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
int panduan(int x,int y){
if((a[x-1][y]==-1||a[x+1][y]==-1)&&(a[x][y+1]==-1||a[x][y-1]==-1)) return 1;
else return 0;
}
void digui(int x,int y){
for(int i=0;i<4;i++){
if(x+d[i][0]>=1&&x+d[i][0]<=n&&y+d[i][1]>=1&&y+d[i][1]<=m&&a[x+d[i][0]][y+d[i][1]]!=-1&&panduan(x+d[i][0],y+d[i][1])){
a[x+d[i][0]][y+d[i][1]]=-1,s++,digui(x+d[i][0],y+d[i][1]);
}
}
return ;
}
int main(){
int t;scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&q);
memset(a,0,sizeof(a));
while(q--){
s=0;
int x,y;
scanf("%d%d",&x,&y);
if(a[x][y]!=-1){
a[x][y]=-1;
s++;
digui(x,y);
}
printf("%d\n",s);
}
}
return 0;
}

hdu6699Block Breaker的更多相关文章

  1. Circuit Breaker Pattern(断路器模式)

    Handle faults that may take a variable amount of time to rectify when connecting to a remote service ...

  2. customized English word breaker for sql server 2008

    Open the Registry Editor, by: Clicking Start, and clicking Run. In the Run dialog box, in the Open b ...

  3. Circuit Breaker Features

    Better to use a circuit breaker which supports the following set of features: Automatically time-out ...

  4. 谈谈Circuit Breaker在.NET Core中的简单应用

    前言 由于微服务的盛行,不少公司都将原来细粒度比较大的服务拆分成多个小的服务,让每个小服务做好自己的事即可. 经过拆分之后,就避免不了服务之间的相互调用问题!如果调用没有处理好,就有可能造成整个系统的 ...

  5. 断路器(Curcuit Breaker)模式

    在分布式环境下,特别是微服务结构的分布式系统中, 一个软件系统调用另外一个远程系统是非常普遍的.这种远程调用的被调用方可能是另外一个进程,或者是跨网路的另外一台主机, 这种远程的调用和进程的内部调用最 ...

  6. Circuit Breaker模式

    Circuit Breaker模式会处理一些需要一定时间来重连远程服务和远端资源的错误.该模式可以提高一个应用的稳定性和弹性. 问题 在类似于云的分布式环境中,当一个应用需要执行一些访问远程资源或者是 ...

  7. [AOP] 7. 一些自定义的Aspect - Circuit Breaker

    Circuit Breaker(断路器)模式 关于断路器模式是在微服务架构/远程调用环境下经常被使用到的一个模式.它的作用一言以蔽之就是提高系统的可用性,在出现的问题通过服务降级的手段来保证系统的整体 ...

  8. Akka之Circuit Breaker

    这周在项目中遇到了一个错误,就是Circuit Breaker time out.以前没有接触过,因此学习了下akka的断路器. 一.为什么使用Circuit Breaker 断路器是为了防止分布式系 ...

  9. .NET Core中Circuit Breaker

    谈谈Circuit Breaker在.NET Core中的简单应用 前言 由于微服务的盛行,不少公司都将原来细粒度比较大的服务拆分成多个小的服务,让每个小服务做好自己的事即可. 经过拆分之后,就避免不 ...

随机推荐

  1. 使用git版本管理时的免密问题

    方式1 使用ssh 方式 方式2 使用命令  git config --global  credential.helper store 会把密码存放到当前用户的home目录下的 该文件中 [root@ ...

  2. SSH简单Demo

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3 ...

  3. 2018-2-13-win10-uwp-smms图床

    title author date CreateTime categories win10 uwp smms图床 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 1 ...

  4. CentOS7 设置电源选项,待机、睡眠、挂起

    设置装有 CentOS7 的笔记本合盖后黑屏进入睡眠模式 systemd 能够处理某些电源相关的 ACPI事件,你可以通过从 /etc/systemd/logind.conf 以下选项进行配置: Ha ...

  5. Airbnb JavaScript 编码风格指南(2018年最新版)

    原网址 :  https://segmentfault.com/a/1190000013040555 类型 基本类型:直接存取 string number boolean null undefined ...

  6. Jupyter配置工作路径

    在修改之前,C:\Users\Administrator\ .jupyter 目录下面只有一个“migrated”文件. 打开命令窗口(运行->cmd),进入python的Script目录下输入 ...

  7. dd hdparm 速度不一致

    https://www.cnblogs.com/yinzhengjie/p/9935478.html hparm     # 它用来在基于Linux的系统上获取或设置硬盘参数,包括测试读性能以及缓存性 ...

  8. ArrayList,Vector, LinkedList的存储性能和特性?

    ArrayList,Vector, LinkedList的存储性能和特性? ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入或删除时非常麻烦. ...

  9. JDBC连接Hive数据库

    一.依赖 pom <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncodi ...

  10. Flask学习笔记02之配置文件

    1. Flask默认的配置 Flask实例中包含了它的配置信息 #实例化一个Flask对象 app = Flask(__name__) # 打印默认配置信息 print(app.config) 打印结 ...