二哥养细菌——java

1003. 二哥养细菌

题目描述

二哥不仅种苹果和花生,还养了很多细菌。二哥的细菌培养皿成方格形,边长为L。长期培养后,二哥发现了细菌繁殖的规律:最初每个格子里的细菌及其后代都会独立繁殖,每次繁殖都会在其上下左右四个相邻的格子里产生新的细菌,而已经存在的细菌在培养皿充满细菌之前都不会死亡。另外,有一些格子里可能还有抗生素,细菌在有抗生素的格子里无法繁殖。

二哥于是发明了一个游戏:取一个新的培养皿,在某些格子里放入细菌或抗生素,然后观察细菌不断繁殖直至充满整个培养皿的所有没有抗生素的格子。不过二哥已经对这个游戏厌烦了,他现在只想知道经过多少轮繁殖后,细菌会充满整个培养皿(不算有抗生素的格子)。

输入格式

第1行有1个整数,边长L。

第2行至第L+1行,每行有L个整数,取值为0、1或2。0表示格子里最初没有细菌,1表示格子里最初有细菌,2表示格子里最初有抗生素。

输出格式

输出一个整数m,表示经过m轮繁殖后,细菌会充满整个培养皿(不算有抗生素的格子)。

说明

【样例解释】 第一轮繁殖:

2 1 0

1 1 1

0 1 0

第二轮繁殖:

2 1 1

1 1 1

1 1 1

【数据范围】

对于全部数据:1≤L≤100 ,保证最终能够充满培养皿(不算有抗生素的格子)。

Sample Input

3
2 0 0
0 1 0
0 0 0

Sample Output

2

这道题很明显你可以通过每一次遍历来得到答案,但是这是一种效率和低下的办法,需要n*L^2次,但是如果一个人在作者道题去模拟这道题时,绝对不是每次遍历,而是记住了上一次由0变为1的位置,所以我们也必须记住位置,这样的效率最高,为L^2次。下面是源代码
import java.util.ArrayList;
import java.util.Scanner;

public class Main{

	private static Scanner in;

	public static void main(String[] args) {
		in = new Scanner(System.in);
		int L = in.nextInt();
		Tag [][] tag=new Tag[L+2][L+2];
		ArrayList <Tag> list =new ArrayList<Tag>();
		for(int i=0;i<L+2;i++){
			for(int j=0;j<L+2;j++){
				tag[i][j]=new Tag();
				if(i==0||i==L+1||j==0||j==L+1){
					tag[i][j].x=i;
					tag[i][j].y=j;
					tag[i][j].flag=true;
				}else{
					tag[i][j].x=i;
					tag[i][j].y=j;
					tag[i][j].s=in.nextInt();
					if(tag[i][j].s==1){
						list.add(tag[i][j]);
						tag[i][j].flag=true;
					}
					if(tag[i][j].s==2){
						tag[i][j].flag=true;
					}
				}
			}
		}
		int a=list.size();
		int res=0;
		int count =0;
		for(int i=0;i<list.size();i++){
			count++;
			Tag temp = list.get(i);
			if(!tag[temp.x-1][temp.y].flag){
				list.add(tag[temp.x-1][temp.y]);
				tag[temp.x-1][temp.y].flag=true;
			}
			if(!tag[temp.x][temp.y-1].flag){
				list.add(tag[temp.x][temp.y-1]);
				tag[temp.x][temp.y-1].flag=true;
			}
			if(!tag[temp.x][temp.y+1].flag){
				list.add(tag[temp.x][temp.y+1]);
				tag[temp.x][temp.y+1].flag=true;
			}
			if(!tag[temp.x+1][temp.y].flag){
				list.add(tag[temp.x+1][temp.y]);
				tag[temp.x+1][temp.y].flag=true;
			}
			list.remove(i);
			i--;
			if(count==a){
				a=list.size();
				res++;
				count=0;
			}
		}
		System.out.println(res-1);
	}
  static class Tag{
	int x;
	int y;
	int s;
	boolean flag;
  }
}

  

二哥养细菌——java

时间: 2024-11-06 04:33:39

二哥养细菌——java的相关文章

极限工坊淘小咖:代理小程序能挣钱吗?

小程序自推出以来,一直倍受大家的关注,无论是IT大鳄,还是草根创业者都想在小程序市场分一杯羹.小程序的问世不止是对开发界的革新,更多的是对线下传统商业的革新.小程序也繁衍出很多创业项目,比如UI程序猿需求变大,小程序定制开发,小程序推广运营,小程序代理等等,对没有开发技术的草根来说小程序代理无疑是最好的小程序创业方式. 代理小程序能挣钱吗?1.朝阳风口项目自从微信推出小程序以来,短短几个月的时间内,百度.支付宝都陆续推出了自己的小程序端口来占领小程序市场,小程序的前景可见一斑,俗话说跟对人做对事

测序总结,高通量测序名词

主要来自 :http://mp.weixin.qq.com/s/iTnsYajtHsbieGILGpUYgQ 测序的黄金标准:一代测序了,故称之为黄金测序. 高通量测序最近这几年很火越来越火,但是世界上更多的还是一帮天天做分子克隆.养细胞.养细菌.杂蛋白的生物学家,究其原因Sanger测序还是测序届的金标准,由于精确度高于2.3代测序且保持大白菜价格使之地位稳固. 应用范围:De Novo测序.重测序: 如突变检测.SNPs.插入.缺失克隆产物验证.比较基因组.分型: 如微生物和真菌鉴定.HLA

测序简史

测序简史 一代 二代测序 三代测序 一文从一代到最新的测序技术,希望能够帮助你. 序 这几天天气很热,热的人心惶惶.因此一直提上日程的所谓的测序简史,也没有时间去好好的落实.中途找过一个行业内的颇有影响力的人,但是他由于种种原因,也没有能踏踏实实的去做这件事情.几经周折,这个任务还是落到了我自己的肩上. 于是乎,我鼓鼓勇气,尝试着去把这段从1977年到2017年的漫长而又渺小的四十年说的有趣些儿. 当我起笔去写这篇文章的时候,小伙伴们还在工作室因为某个服务器后台技术争论不了,这样看来生信人团队还

【养孩子这么贵,还是生一个算了吧】设计模式之单例模式Java版

定义 单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点.所以在需要保证让一个类只有一个实例时,可以参考采用单例模式.通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象.唯一的办法就是,让类自身负责保存它的唯一实例.这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法. 方法一 其一,不让其他类去实例化自己类的实例,那我们很容易想到可以通过定义一个private的构造函数.这是因为如果我们自定义了一个private的构造函数,那么系统默认的

从JAVA多线程理解到集群分布式和网络设计的浅析

对于JAVA多线程的应用非常广泛,现在的系统没有多线程几乎什么也做不了,很多时候我们在何种场合如何应用多线程成为一种首先需要选择的问题,另外关于java多线程的知识也是非常的多,本文中先介绍和说明一些常用的,在后续文章中如果有必要再说明更加复杂的吧,本文主要说明多线程的一下几个内容: 1.在应用开发中什么时候选择多线程? 2.多线程应该注意些什么? 3.状态转换控制,如何解决死锁? 4.如何设计一个具有可扩展性的多线程处理器? 5.多线程联想:在多主机下的扩展-集群? 6.WEB应用的多线程以及

Java笔记(07):面向对象--多态

1.final关键字 1 /* 2 final可以修饰类,方法,变量 3 4 特点: 5 final可以修饰类,该类不能被继承. 6 final可以修饰方法,该方法不能被重写.(覆盖,复写) 7 final可以修饰变量,该变量不能被重新赋值.因为这个变量其实常量. 8 9 常量: 10 A:字面值常量 11 "hello",10,true 12 B:自定义常量 13 final int x = 10; 14 */ 15 16 //final class Fu //无法从最终Fu进行继承

Java笔记1(2015-8-29)

1.概念:类(就是创建对象的模板和蓝图,一组类似对象的共同抽象定义)对象(类的实例化结果,实实在在存在的事物).类是对象的定义,对象的产生离不开类,类存在的目的:就是为了实例化对象.类是静态,对象是动态实例.程序代码操作的是对象,建模得到的是类.对象由方法和属性构成.属性就是变量. 2.定一个类的步骤:a)定义类名:b)编写类的字段代表它的属性:c)编写类的方法. 3.对象的创建与使用 a) 类的创建(类的定义.类的实例化)公式: 数据类型 类名 = new 数据类型(); 数据类型 对象名 =

工厂类分离与java反射机制

网易 博客 发现 小组 风格 手机博客 玩LOFTER,免费冲印20张照片!> 创建博客登录 加关注 黙言-在路上 奋斗 首页 日志 相册 音乐 收藏 博友 关于我 黙言 加博友   关注他 他的网易微博 最新日志 Javascript 操作select控件 Oracle 存储过程基本语法 将域名和tomcat6进行绑定的 svn 423 Locked JS的trim()方法 jbpm4.4 结束流程时报错 随机阅读 让员工每年有一次机会当主角 外国女性如何舍身"套"色狼 亚洲电

【Java】Java_01初步

1.编程语言的发展史和发展主线 计算机语言如果你将它当做一个产品,就像我们平时用的电视机.剃须刀.电脑.手机等, 他的发展也是有规律的. 任何一个产品的发展规律都是:向着人更加容易使用.功能越来越强大的方向发展. 那么,我们的计算机语言的发展也是这样,向着人更加容易使用,即更加容易写代码.更加容易实现现实逻辑的方向发展.套用奥林匹克的口号“更高.更快.更强”.那么计算机发展的主线可以总结为四个字:“更易.更强”. 这个”更易.更强”的主线,也适用于任何的产品.如果,读者朋友以后要开公司创造自己的