Problem

We have a grid with R rows and C columns in which every entry is either 0 or 1. We are going to perform N operations on the grid, each of which is one of the following:

  • Operation M: Change a number in one cell of the grid to 0 or 1
  • Operation Q: Determine the number of different connected regions of 1s. A connected region of 1s is a subset of cells that are all 1, in which any cell in the region can be reached from any other cell in the region by traveling between cells along edges (not corners).

Input

The first line of the input gives the number of test cases, TT test cases follow. Each test case starts with one line with two integers, R and C, which represent the number of rows and columns in the grid. Then, there are R lines of C characters each, in which every character is either 0 or 1. These lines represent the initial state of the grid.

The next line has one integer, N, the number of operations to perform on the grid. N more lines follow; each has one operation. All operation Ms will be of the form M x y z, meaning that the cell at row x and column y should be changed to the value z. All operation Qs will be of the form Q.

Output

For each test case, output one line containing "Case #x:", where x is the test case number (starting from 1). Then, for every operation Q in the test case, in order, output one line containing the number of connected regions of 1s.

Limits

1 ≤ T ≤ 10.
1 ≤ R, C ≤ 100.
0 ≤ x < R.
0 ≤ y < C.
0 ≤ z ≤ 1.

Small dataset

1 ≤ N ≤ 10.

Large dataset

1 ≤ N ≤ 1000.

Sample

Input 
 
Output 
 
1
4 4
0101
0010
0100
1111
7
Q
M 0 2 1
Q
M 2 2 0
Q
M 2 1 0
Q
Case #1:
4
2
2
2
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Arrays;
import java.util.Scanner; public class Q1 { /*
*
1
4 4
0101
0010
0100
1111
7
Q
M 0 2 1
Q
M 2 2 0
Q
M 2 1 0
Q 1
4 4
0101
1010
0101
1111
1
Q
*/ static int a[][];
static int mark[][];
static void markA(int x, int y){
if(x>=a.length || x<0 || y<0 || y>=a[0].length || a[x][y]==0 ||mark[x][y]==1){
return;
} if(a[x][y]==1){
mark[x][y]=1;
}
//You
if(y<a[0].length-1 ){
markA(x, y+1);
}
//zuo
if(y>0){
markA(x, y-1);
}
//xia
if(x<a.length-1){
markA(x+1, y);
} if(x>0){
markA(x-1, y);
}
}
static int query(){
int count=0;
for(int i=0; i<a.length; i++){
for(int j=0; j<a[0].length; j++){ if(mark[i][j]==0 && a[i][j]==1){
count++;
// System.out.println(i +":: "+j); // System.out.println(count);
markA(i, j);
// System.out.println(Arrays.toString(mark[0]));
// System.out.println(Arrays.toString(mark[1]));
// System.out.println(Arrays.toString(mark[2]));
// System.out.println(Arrays.toString(mark[3]));
}
}
}
return count;
}
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
PrintWriter writer = new PrintWriter("out.txt");
int t=scanner.nextInt();
int c,r;
int m;
//scanner.nextLine();
for(int ttt=0; ttt<t;++ttt){
c=scanner.nextInt();
r=scanner.nextInt();
scanner.nextLine(); a=new int[c][r];
mark= new int[c][r];
for(int i=0; i<c; i++){ String line =scanner.nextLine(); for(int j=0; j<r; j++){
a[i][j]=line.charAt(j)-'0';
}
}
writer.println("Case #"+(ttt+1)+":");
m=scanner.nextInt();
for(int i=0; i<m;i++){
String x=scanner.next();
int x1,y1,value;
if(x.equals("Q")){
writer.println(query());
mark=new int[c][r];
}else if(x.equals("M")){
x1=scanner.nextInt();
y1=scanner.nextInt();
value = scanner.nextInt();
a[x1][y1]=value;
mark=new int[c][r];
}
}
} //int result=query();
//System.out.println(result);
scanner.close();
writer.close();
} }

Problem A. Dynamic Grid的更多相关文章

  1. [Algorithm] Meeting hour optimization (Kanpsack problem) and Dynamic programming

    For example we have array of meeting objects: const data = [ { name: }, { name: }, { name: }, { name ...

  2. HDU - 6321 Problem C. Dynamic Graph Matching (状压dp)

    题意:给定一个N个点的零图,M次操作,添加或删除一条边,每一次操作以后,打印用1,2,...N/2条边构成的匹配数. 分析:因为N的范围很小,所以可以把点的枚举状态用二进制表示集合.用一维数组dp[S ...

  3. Codeforces 1503C Travelling Salesman Problem(Dynamic Programming)

    题意 大家都是优秀生,这点英文还是看得懂的:点此看题 题解 由于旅行路线成一个环,所以从哪里出发不重要,我们把景点按照 a i a_i ai​ 排序,不妨就从左边最小的出发.基础的旅行费用 c i c ...

  4. hdu 4223 Dynamic Programming?

    Dynamic Programming? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  5. HDU 6321 Dynamic Graph Matching

    HDU 6321 Dynamic Graph Matching (状压DP) Problem C. Dynamic Graph Matching Time Limit: 8000/4000 MS (J ...

  6. hdu多校第3场C. Dynamic Graph Matching

    Problem C. Dynamic Graph Matching Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Tot ...

  7. Working with the Dynamic Type in C#

    Working with the Dynamic Type in C# https://www.red-gate.com/simple-talk/dotnet/c-programming/workin ...

  8. RAC的QA

    RAC: Frequently Asked Questions [ID 220970.1]   修改时间 13-JAN-2011     类型 FAQ     状态 PUBLISHED   Appli ...

  9. Leetcode: climbing stairs

    July 28, 2015 Problem statement: You are climbing a stair case. It takes n steps to reach to the top ...

随机推荐

  1. js获取屏幕

    js获取屏幕(设备)宽高 <script language="javascript"> var h = ""; h += " 网页可见区域 ...

  2. Logger Rate Limiter -- LeetCode

    Design a logger system that receive stream of messages along with its timestamps, each message shoul ...

  3. Burnside引理与polay定理

    #Burnside引理与polay定理 引入概念 1.置换 简单来说就是最元素进行重排列 是所有元素的异议映射,即\([1,n]\)映射到\([1,n]\) \[ \begin{pmatrix} 1& ...

  4. zlib stream

      官方帮助手册 http://www.zlib.net/manual.html   #include <stdlib.h> #include <string.h> #incl ...

  5. Visual Studio 插件开发资源

    微软官方MSDN 官方MSDN永远是最大而全的电子字典Visual Studio Software Development Kit ,不过它的资料虽然详细,但没有一定的基础的话直接使用它的话有点无从入 ...

  6. 了解一下运行软件的自我保护(RASP)

    看下这篇文章: http://www.jianshu.com/u/c89141b2d51e 相应的demo演示: https://github.com/xbeark/javaopenrasp

  7. linux下小试redis demo

    先启动  redis-server /etc/redis/redis.conf package com.test; import java.util.ArrayList; import java.ut ...

  8. log4j教程 2、安装

    Log4j的API包使用Apache软件许可证,由开源倡议认证一个完全成熟的开源许可证下发布. 最新log4j的版本,包括完整的源代码,类文件和文档可以在这里找到 http://logging.apa ...

  9. Spark 2.0 DataFrame map操作中Unable to find encoder for type stored in a Dataset.问题的分析与解决

    转载:http://blog.csdn.net/sparkexpert/article/details/52871000 随着新版本的spark已经逐渐稳定,最近拟将原有框架升级到spark 2.0. ...

  10. 编译安装Apache httpd和php搭建KodExplorer网盘

    编译安装Apache httpd和php搭建KodExplorer网盘 环境说明: 系统版本    CentOS 6.9 x86_64 软件版本    httpd-2.2.31        php- ...