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. ESLint 的使用和.eslintrc.js配置

    在团队协作中,为避免低级 Bug.产出风格统一的代码,会预先制定编码规范.使用 Lint 工具和代码风格检测工具,则可以辅助编码规范执行,有效控制代码质量. ESLint 简介 ESLint 由 Ja ...

  2. oracle exp CONSISTENT

    exp相当于select,不会被其他操作锁定. 但是如果exp的时候指定了CONSISTENT = y,而数据库中又存在频繁修改,可能会导致exp的时候出现snapshot too old

  3. Unique Word Abbreviation -- LeetCode

    An abbreviation of a word follows the form <first letter><number><last letter>. Be ...

  4. 洛谷 P3804 后缀自动机

    题目描述 给定一个只包含小写字母的字符串SS , 请你求出 SS 的所有出现次数不为 11 的子串的出现次数乘上该子串长度的最大值. 输入输出格式 输入格式: 一行一个仅包含小写字母的字符串SS 输出 ...

  5. linux 自动删除n天前文件

    现在系统每天生成一个日期文件夹,并压缩上传到ftp服务器,造成目录下文件太多,所以决定写个定时删除文件的任务 写脚本文件 find /home/data -mtime +90 -name " ...

  6. Python学习笔记——对象

    Python 的对象定义方式如下: class Person:        def __init__(self, name):            self.name = name         ...

  7. tiny4412 串口驱动分析八 --- log打印的几个阶段之内核启动阶段(printk tiny4412串口驱动的注册)

    作者:彭东林 邮箱:pengdonglin137@163.com 开发板:tiny4412ADK+S700 4GB Flash 主机:Wind7 64位 虚拟机:Vmware+Ubuntu12_04 ...

  8. kaptcha Java验证码

    原文:http://www.cnblogs.com/chizizhixin/p/5311619.html 在项目中经常会使用验证码,kaptcha 就一个非常不错的开源框架,分享下自己在项目中的使用: ...

  9. 【IntellJ IDEA】idea上 实现了Serializable接口,要自动生成serialVersionUID的方法

    需要点进setting ->搜索Inspections-->右侧选择java 下拉 进入Serialization issue--->勾选Serializable class wit ...

  10. 教育 z

    奥巴马母亲留给儿子的遗产,不是谎言,而是让反对派不敢戮辨的——伟大的人格及优秀! 相比于奥巴马的母亲,中国式父母,更愿意走省心的路子.给孩子最催肥的食物,最昂贵的衣物,最庸懒的生活环境,不让孩子做任何 ...