北京大學OpenJudge 2815 城堡問題

2021-08-23 14:11:23 字數 1618 閱讀 7388

總時間限制: 

1000ms

記憶體限制: 

65536kb

描述

1   2   3   4   5   6   7  

#############################

1 # | # | # | | #

#####---#####---#---#####---#

2 # # | # # # # #

#---#####---#####---#####---#

3 # | | # # # # #

#---#########---#####---#---#

4 # # | | | | # #

#############################

(圖 1)

# = wall

| = no wall

- = no wall

圖1是乙個城堡的地形圖。請你編寫乙個程式,計算城堡一共有多少房間,最大的房間有多大。城堡被分割成mn(m≤50,n≤50)個方塊,每個方塊可以有0~4面牆。

輸入程式從標準輸入裝置讀入資料。第一行是兩個整數,分別是南北向、東西向的方塊數。在接下來的輸入行裡,每個方塊用乙個數字(0≤p≤50)描述。用乙個數字表示方塊周圍的牆,1表示西牆,2表示北牆,4表示東牆,8表示南牆。每個方塊用代表其周圍牆的數字之和表示。城堡的內牆被計算兩次,方塊(1,1)的南牆同時也是方塊(2,1)的北牆。輸入的資料保證城堡至少有兩個房間。

輸出城堡的房間數、城堡中最大房間所包括的方塊數。結果顯示在標準輸出裝置上。

樣例輸入

4 

7 11 6 11 6 3 10 6

7 9 6 13 5 15 5

1 10 12 7 13 7 5

13 11 10 8 10 12 13

樣例輸出

5

9

**

源**:

#include#include#includeusing namespace std;

int room[60][60];

int color[60][60];

int roomnum=0,roomarea;//設定房間數、房間大小都為0

int maxroomarea=0;

int r,c;

void dfs(int i,int j)

int main(){

cin>>r>>c;

for(int i=0;i>room[i][j];

memset(color,0,sizeof(color));

for(int i=0;i首先將color陣列初始化為0(類似於vis標記陣列),如果說color[i][j]沒有重複的就說明是不同的房間,我們把房間數做自增操作並且房間大小賦值為零。執行深搜操作:這裡巧妙地運用題目中的1,2,4,8分別表示四個方向的提示,如果說按位與的結果為0就說明不存在哪個方向的牆,就往哪個方向做深搜操作,最終當所有深搜完成後,輸出房間數和房間大小就完成

ps:在main函式當中判斷房間是否是同一顏色的時候,一定是先增加房間數再執行歸零操作,不然最終的結果會大於輸出樣例出現錯誤。

北京大學OpenJudge 3468 電池的壽命

總時間限制 1000ms 記憶體限制 65536kb 描述小s新買了乙個掌上遊戲機,這個遊戲機由兩節5號電池供電。為了保證能夠長時間玩遊戲,他買了很多5號電池,這些電池的生產商不同,質量也有差異,因而使用壽命也有所不同,有的能使用5個小時,有的可能就只能使用3個小時。顯然如果他只有兩個電池乙個能用5...

蓋茨北京大學演講

大家早上好!微軟認為計算將是個人的,所有的人們創造出來工具,在所有的工具中個人電腦將是重要的一點,它能夠為人們提供溝通以及製造,做生意的全新的方式,這些充滿了好奇心的學生,更好地獲取各種各樣的資訊,讓他們找到自己問題的答案。在過去的30年中,確實是令人難以置信的。我們看到計算以後的方式發展,在30多...

北京大學openjudge 07 求排列的逆序數

總時間限制 1000ms 記憶體限制 65536kb 描述在internet上的搜尋引擎經常需要對資訊進行比較,比如可以通過某個人對一些事物的排名來估計他 或她 對各種不同資訊的興趣,從而實現個性化的服務。對於不同的排名結果可以用逆序來評價它們之間的差異。考慮1,2,n的排列i1,i2,in,如果其...