[python隊列廣搜]請佩戴好口罩

請佩戴好口罩

題目描述

疫情當下,希望同學們都認真佩戴口罩,保護自己,保護他人。
現假設有一個n*n的網格,每個人分別站在網格中的一個方格上,人們可以選擇佩戴/不佩戴口罩,口罩對于病毒的傳播有如下影響,分為兩種情況:
1. 某人已被感染,若未佩戴口罩,則病毒的“傳染區域”是患者周圍的四個方格;若正確佩戴口罩,則病毒無法傳染其他人。
2. 某人健康,若未佩戴口罩,則只要他位于任意一個患者的“傳染區域”內,就會被傳染;若正確佩戴口罩,則只有他同時位于4個患者的“傳染區域”內時,才會被傳染。
我們將給出網格中每個人的口罩佩戴情況,以及網格中第一個患者的位置,請你計算d天后共有多少患者。

關于輸入

第一行輸入正整數n,表示網格的邊長,1<=n<=100。
接下來輸入網格,n行,每行n個整數,0表示未佩戴口罩,1表示佩戴口罩。
接下來一行是兩個整數,表示第一個感染者在網格中的行、列坐標(規定網格左上角格子的坐標為(0, 0),右上角格子的坐標為(0, n-1),以此類推)。
接下來一行是一個正整數,表示天數d,1<=d<=100。

關于輸出

輸出為一行整數,表示經過d天后患者的人數。

例子輸入
4
0 0 0 1
0 1 0 0
1 0 0 1
0 0 1 0
1 2
5
例子輸出
11
解題分析

在python中直接用多層for循環是很慢的,Python是一種解釋型語言,相對于編譯語言,解釋器需要更多的時間來解析和執行代碼。此外,對于每一次循環迭代,Python需要進行更多的工作,例如變量查找、內存分配等。所以,本題如果直接定義一些數組存儲信息,并用for循環去做的話,也不是不可以,只是在對于數據量比較大的情況下,會導致時間上開銷極大。

下面介紹一種利用隊列數據結構來優化的方法。我們可以引入隊列(queue)數據結構,這個結構的特點是頭出尾進,也就是它只能從尾巴進入隊列,從隊頭離開隊列。這是可以用數組去模擬的。只要我們在全局過程中維護好我們的一些下標變量和整個的數組結構即可。

我們還需要一個病人類記錄發病的人的位置和發病的天數,以便我們去判斷。

首先通過輸入獲取了網格的邊長n以及網格中每個人的口罩佩戴情況,以及第一個患者的位置和天數d。然后使用了隊列的數據結構,將第一個患者的位置和天數加入到隊列中,并標記其口罩佩戴情況。接著,通過一個while循環,不斷遍歷隊列中的元素,每次遍歷時,都會將患者的傳染區域內的健康人標記為2,同時將傳染區域的健康人加入到隊列中,并標記其天數。在遍歷的過程中,通過不斷pop()和push()操作,實現了對隊列中元素的處理。最后,通過對網格中每個人的口罩佩戴情況進行遍歷,計算出經過d天后患者的人數,并輸出。

代碼實現
count=1
n=int(input())
mask=[[0 for _ in range(n)] for _ in range(n)]
dx=[0,0,-1,1]
dy=[-1,1,0,0]
for i in range(n):mask[i]=list(map(int,input().split()))
x1,y1=map(int,input().split())
days=int(input())
d=1
count=1
q=[]
l=0
class sick:def __init__(self,x1,y1,d):self.x=x1self.y=y1self.day=d
q.append(sick(x1,y1,1))
if mask[x1][y1]==1:print(1)exit()
mask[x1][y1]=2
def pop():global ll+=1
def front():global lreturn q[l]
def push(x):q.append(x)
while l<len(q) and d<=days:p=front()while p.day==d:for i in range(4):nx=p.x+dx[i]ny=p.y+dy[i]if nx>=0 and nx<n and ny>=0 and ny<n and mask[nx][ny]==0:count+=1if d!=days:mask[nx][ny]=2else:mask[nx][ny]=3push(sick(nx,ny,d+1))pop()if l>=len(q):breakp=front()d+=1
for i in range(n):for j in range(n):if mask[i][j]==1:tmp=0for k in range(4):nx=i+dx[k]ny=j+dy[k]if nx>=0 and nx<n and ny>=0 and ny<n and mask[nx][ny]==2:tmp+=1if tmp==4:count+=1
print(count)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717148.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717148.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717148.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

被曝隱瞞添加劑、夸大產品功效,東方甄選再陷選品風波

號稱專注為客戶細心甄選好物的東方甄選&#xff08;&#xff08;HK:01797&#xff09;&#xff09;&#xff0c;又攤上事兒了。 近日&#xff0c;海關總署發布公告稱&#xff0c;美國飲料生產企業JERRY&SONS PHARMACEUTICAL INC在申請注冊時提供了虛假材料&#xff0c;且未…

moviepy用法大全

1.引用 from moviepy.editor import * 2. 載入 2.1 載入視頻 video = VideoFileClip(filePath) 2.2 載入音頻 audio=AudioFileClip(filePath) 2.3 載入圖片 img = (ImageClip(videopath+videofengpi) # 水印持續時間 .set_duration(start_video_clip_begin.duration) …

C2_W2_Assignment_吳恩達_中英_Pytorch

Neural Networks for Handwritten Digit Recognition, Multiclass In this exercise, you will use a neural network to recognize the hand-written digits 0-9. 在本次練習中&#xff0c;您將使用神經網絡來識別0-9的手寫數字。 Outline 1 - Packages 2 - ReLU Activatio…

c語言經典測試題9

1.題1 #include <stdio.h> int main() { int i 1; sizeof(i); printf("%d\n", i); return 0; } 上述代碼運行結果是什么呢&#xff1f; 我們來分析一下&#xff1a;其實這題的難點就是sizeof操作后i的結果是否會改變&#xff0c;首先我們創建了一個整型i&a…

LeetCode刷題小記 六、【棧與隊列】

1.棧與隊列 文章目錄 1.棧與隊列寫在前面1.1棧與隊列理論基礎1.2用棧實現隊列1.3用隊列實現棧1.4有效的括號1.5刪除字符串中的所有相鄰重復項1.6逆波蘭表達式求值1.7滑動窗口最大值1.8前K個高頻元素 Reference 寫在前面 本系列筆記主要作為筆者刷題的題解&#xff0c;所用的語…

分布式基礎 --- Leader election

分布式基礎 --- Leader election 為什么需要leader electionRing electionBully Algorithm 為什么需要leader election 在一組集群中, 需要選出一個leader來承擔一些特別的任務, 比如 協調和控制系統操作&#xff1a;領導者負責協調和控制整個分布式系統的操作。它可以接收和處…

one4all 排坑記錄

one4all 排坑記錄 任務踩坑回顧動作踩坑動作踩坑動作新一步測試Habitat-sim 測試habitat-lab繼續ONE4ALL 任務 看了《One-4-All: Neural Potential Fields for Embodied Navigation》這篇論文&#xff0c;感覺挺有意思&#xff0c;他也開源了代碼。視覺語言導航是我一直想做的…

windows上elasticsearch的ik分詞器的安裝

下載 下載地址 在elasticsearch下的plugins文件夾下創建ik的文件夾 下載的ik壓縮包解壓到plugins/ik 重啟elasticsearch 驗證 http://ip:9200/_cat/plugins

python筆記_運算符優先級

運算符描述算術運算符&#xff08;x&#xff09;括號內優先級最高**乘方 * / // % 乘 矩陣乘 除 整除 取余 _ 加 減 位運算符 >> << 右移 左移 &按位與^按位異或|按位或比較運算符 in not in is is not < < > > ! 判斷兩個變量是否相同 判…

SpringBoot3-核心原理

1. 事件和監聽器 1. 生命周期監聽 場景&#xff1a;監聽應用的生命周期 1. 監聽器-SpringApplicationRunListener 自定義SpringApplicationRunListener來監聽事件&#xff1b; 編寫SpringApplicationRunListener 實現類在 META-INF/spring.factories 中配置 org.springfram…

【藍橋杯】錯誤票據

今天是2024年3月1號&#xff0c;藍橋杯比賽還有一個月的時間&#xff0c;雖說自己不指望拿獎吧&#xff0c;但是還是有些莫i名的焦慮&#xff0c;這道題目都做不出來&#xff0c;感覺自己真的有點菜啊&#xff01;但是還好啦&#xff0c;我覺得是因為我沒有題感&#xff0c;慢慢…

spring boot 整合 minio存儲 【使用篇】

導入依賴 <!--minio--><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.0.3</version></dependency> yml配置&#xff08;默認配置&#xff09; max-file-size: 200MB 設置文件最大…

華為od機試C卷-開源項目熱度榜單

1、題目描述 某個開源社區希望將最近熱度比較高的開源項目出一個榜單&#xff0c;推薦給社區里面的開發者。 對于每個開源項目&#xff0c;開發者可以進行關注(watch)、收藏(star)、fork、提issue、提交合并請求(MR)等。 數據庫里面統計了每個開源項目關注、收藏、fork、issue…

微服務API網關---APISIX

最近在做微服務調研&#xff0c;看到了apisix這個網關&#xff0c;于是進行了初步了解一下。 微服務是指&#xff0c;將大型應用分解成多個獨立的組件&#xff0c;其中每個組件都各自的負責對應項目。 系統的架構大致經歷了&#xff1a;單體應用架構–> SOA架構 -->微服務…

Linux多線程服務端編程:使用muduo C++網絡庫 學習筆記 附錄D 關于TCP并發連接的幾個思考題與試驗

前幾天作者在新浪微博上出了兩道有關TCP的思考題&#xff0c;引發了一場討論&#xff08;http://weibo.com/1701018393/eCuxDrtaONn&#xff09;。 第一道初級題目是&#xff1a;有一臺機器&#xff0c;它有一個IP&#xff0c;上面運行了一個TCP服務程序&#xff0c;程序只偵聽…

StarRocks實戰——松果出行實時數倉實踐

目錄 一、背景 二、松果出行實時OLAP的演進 2.1 實時數倉1.0的架構 2.2 實時數倉2.0的架構 2.3 實時數倉3.0的架構 三、StarRocks 的引入 四、StarRocks在松果出行的應用 4.1 在訂單業務中的應用 4.2 在車輛方向的應用 4.3 StarRocks “極速統一” 落地 4.4 StarRoc…

Lambda、Function、StreamAPI詳解

目錄 1、Lambda 2、Function 3、StreamAPI 中間操作&#xff1a;Intermediate Operations 終止操作&#xff1a;Terminal Operation 1、Lambda Java8語法糖&#xff1a;參數列表 箭頭 方法體 package com.atguiggu.lambda;import java.util.*; import java.util.funct…

分布式ID生成系統之雪花算法詳解

在當今的云計算和微服務架構盛行的時代&#xff0c;分布式系統已成為軟件開發的重要組成部分。隨著系統規模的擴大和業務的復雜化&#xff0c;對數據一致性和唯一性的要求也越來越高&#xff0c;尤其是在全局唯一標識符&#xff08;ID&#xff09;的生成上。因此&#xff0c;分…

代碼隨想錄算法訓練營Day48 | 121.買賣股票的最佳時機、122.買賣股票的最佳時機 II

121.買賣股票的最佳時機 &#xff08;想寫動態規劃寫著寫著變成貪心了&#xff09; 半貪心半動規&#xff1a; int maxProfit(vector<int>& prices) {vector<int> dp(prices.size(), 0);int minVal prices[0];for (int i 1; i < prices.size(); i) {//…

yolov5訓練太慢的解決方案

問題原因 訓練太慢大多是因為沒有安裝CUDA和pytorch&#xff0c;導致的只有cpu在跑&#xff0c;顯卡沒跑 這就是很典型的。 解決方案 第一步&#xff1a;安裝CUDA 在本機上面安裝CUDA,記住只有N卡可以安裝&#xff0c;一開始的電腦是自帶CUDA的。 如果不是自帶的CUDA&…