Problem A. Dynamic Grid
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, T. T 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 |
Case #1: |
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的更多相关文章
- [Algorithm] Meeting hour optimization (Kanpsack problem) and Dynamic programming
For example we have array of meeting objects: const data = [ { name: }, { name: }, { name: }, { name ...
- HDU - 6321 Problem C. Dynamic Graph Matching (状压dp)
题意:给定一个N个点的零图,M次操作,添加或删除一条边,每一次操作以后,打印用1,2,...N/2条边构成的匹配数. 分析:因为N的范围很小,所以可以把点的枚举状态用二进制表示集合.用一维数组dp[S ...
- Codeforces 1503C Travelling Salesman Problem(Dynamic Programming)
题意 大家都是优秀生,这点英文还是看得懂的:点此看题 题解 由于旅行路线成一个环,所以从哪里出发不重要,我们把景点按照 a i a_i ai 排序,不妨就从左边最小的出发.基础的旅行费用 c i c ...
- hdu 4223 Dynamic Programming?
Dynamic Programming? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- HDU 6321 Dynamic Graph Matching
HDU 6321 Dynamic Graph Matching (状压DP) Problem C. Dynamic Graph Matching Time Limit: 8000/4000 MS (J ...
- hdu多校第3场C. Dynamic Graph Matching
Problem C. Dynamic Graph Matching Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Tot ...
- 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 ...
- RAC的QA
RAC: Frequently Asked Questions [ID 220970.1] 修改时间 13-JAN-2011 类型 FAQ 状态 PUBLISHED Appli ...
- Leetcode: climbing stairs
July 28, 2015 Problem statement: You are climbing a stair case. It takes n steps to reach to the top ...
随机推荐
- Python爬取中国天气网
Python爬取中国天气网 基于requests库制作的爬虫. 使用方法:打开终端输入 “python3 weather.py 北京(或你所在的城市)" 程序正常运行需要在同文件夹下加入一个 ...
- Akka Cluster之集群分片
一.介绍 当您需要在集群中的多个节点之间分配Actor,并希望能够使用其逻辑标识符与它们进行交互时,集群分片是非常有用的.你无需关心Actor在集群中的物理位置,因为这可能也会随着时间的推移而发生变 ...
- Android的数据存储方式概述
数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 ...
- linux tail指令
http://www.cnblogs.com/peida/archive/2012/11/07/2758084.html tail -f file, check the log file tail ...
- python xml与字典的相互转换
def trans_xml_to_dict(xml): """ 将微信支付交互返回的 XML 格式数据转化为 Python Dict 对象 :param xml: 原始 ...
- JPEG编码(一)
JPEG编码介绍. 转自:http://blog.chinaunix.net/uid-20451980-id-1945156.html JPEG(Joint Photographic Experts ...
- Android学习(二十二)ContentMenu上下文菜单
一.上下问菜单 在某个菜单项上长按,会弹出一个菜单,这个就是上下文菜单.有点类似与Windows系统中的右键菜单. 二.上下文菜单的内容 1.标题 2.图标 3.菜单项 4.对应的菜单事件 三.Opt ...
- C++11之右值引用(二):右值引用与移动语义
上节我们提出了右值引用,可以用来区分右值,那么这有什么用处? 问题来源 我们先看一个C++中被人诟病已久的问题: 我把某文件的内容读取到vector中,用函数如何封装? 大部分人的做法是: v ...
- eclipse显示包的层次关系
如何在eclipse中显示包的层次关系呢?如下图所示
- 字典转模型的过程中,空值和id特殊字符的处理
在IOS 中id是特殊字符,可是非常多时候从网络中下载的数据是以id保存的 假设在定义属性的时候 @property(nonatomic, copy) NSString *id; 就不会出现错误 当键 ...