1003. 二哥养细菌—java
1003. 二哥養(yǎng)細(xì)菌
題目描述
二哥不僅種蘋(píng)果和花生,還養(yǎng)了很多細(xì)菌。二哥的細(xì)菌培養(yǎng)皿成方格形,邊長(zhǎng)為L(zhǎng)。長(zhǎng)期培養(yǎng)后,二哥發(fā)現(xiàn)了細(xì)菌繁殖的規(guī)律:最初每個(gè)格子里的細(xì)菌及其后代都會(huì)獨(dú)立繁殖,每次繁殖都會(huì)在其上下左右四個(gè)相鄰的格子里產(chǎn)生新的細(xì)菌,而已經(jīng)存在的細(xì)菌在培養(yǎng)皿充滿(mǎn)細(xì)菌之前都不會(huì)死亡。另外,有一些格子里可能還有抗生素,細(xì)菌在有抗生素的格子里無(wú)法繁殖。
二哥于是發(fā)明了一個(gè)游戲:取一個(gè)新的培養(yǎng)皿,在某些格子里放入細(xì)菌或抗生素,然后觀察細(xì)菌不斷繁殖直至充滿(mǎn)整個(gè)培養(yǎng)皿的所有沒(méi)有抗生素的格子。不過(guò)二哥已經(jīng)對(duì)這個(gè)游戲厭煩了,他現(xiàn)在只想知道經(jīng)過(guò)多少輪繁殖后,細(xì)菌會(huì)充滿(mǎn)整個(gè)培養(yǎng)皿(不算有抗生素的格子)。
輸入格式
第1行有1個(gè)整數(shù),邊長(zhǎng)L。
第2行至第L+1行,每行有L個(gè)整數(shù),取值為0、1或2。0表示格子里最初沒(méi)有細(xì)菌,1表示格子里最初有細(xì)菌,2表示格子里最初有抗生素。
輸出格式
輸出一個(gè)整數(shù)m,表示經(jīng)過(guò)m輪繁殖后,細(xì)菌會(huì)充滿(mǎn)整個(gè)培養(yǎng)皿(不算有抗生素的格子)。
說(shuō)明
【樣例解釋】 第一輪繁殖:
2 1 0
1 1 1
0 1 0
第二輪繁殖:
2 1 1
1 1 1
1 1 1
【數(shù)據(jù)范圍】
對(duì)于全部數(shù)據(jù):1≤L≤100?,保證最終能夠充滿(mǎn)培養(yǎng)皿(不算有抗生素的格子)。
Sample Input
3 2 0 0 0 1 0 0 0 0Sample Output
2這道題很明顯你可以通過(guò)每一次遍歷來(lái)得到答案,但是這是一種效率和低下的辦法,需要n*L^2次,但是如果一個(gè)人在作者道題去模擬這道題時(shí),絕對(duì)不是每次遍歷,而是記住了上一次由0變?yōu)?的位置,所以我們也必須記住位置,這樣的效率最高,為L(zhǎng)^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;} }
轉(zhuǎn)載于:https://www.cnblogs.com/969059506-java/p/3793119.html
總結(jié)
以上是生活随笔為你收集整理的1003. 二哥养细菌—java的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android 4.x环境搭建
- 下一篇: Cocos2d-X内存管理研究一