NOI Online 3 入門組 第二題 觀星

2021-10-06 14:18:43 字數 1856 閱讀 5375

題目傳送門

bfs和dfs的簡單題目,在這我只講bfs。

我們先找到乙個 *,然後對其進行 bfs,並將所有訪問過的 * 標記為 .,在進行 bfs 的同時記錄下目前的 * 數量。

當一次 bfs 結束後,我們將統計的數量放入之前開好的桶中,即將 hre

s+

1h_+1

hres​+

1。如果此時 hre

sh_

hres

​ 為 0

00,則將星系數量加上 1

11 並更新此時最大的星系,因為只有 hre

sh_

hres

​ 改變了,所以只需要將 hre

sh_

hres

​ 和 max

maxma

x 比較。

結束後再找到乙個沒有被訪問過的 *,然後重複上述過程,直到所有 * 被訪問。

#include

using

namespace std;

char g[

2010][

2010];

int n,m,h[

20000010

],maxn,tots,cnt1,cnt2;

struct node //結構體

;queue q;

int dx[8]

=;int dy[8]

=;void

bfs(

int x,

int y)

//寬搜

} q.

pop();

}if(h[res]==0

) cnt2++

; h[res]++;

//放入桶中

maxn=

max(maxn,h[res]

*res)

;//更新maxn

cnt1+

=res;

//總數++

}int

main()

}while

(cnt1}printf

("%d %d"

,cnt2,maxn)

;//輸出

return0;

}

還有dfs寫法,其實dfs是非常好想的,就是上、下、左、右、左上、右上、左下、右下這四個方位搜尋,找到乙個標記乙個,記住dfs的時候要在未曾遍歷過的點上搜尋

#include

using

namespace std;

const

int maxn=

10010

;const

int maxm=

100010

;char mp[maxn]

[maxn]

;int n,m;

bool vis[maxn]

[maxn]

;int cnt=

0,tmp=

0,ans=

-0x3f3f3f3f

;//初始化+定義

void

dfs(

int x,

int y)

// 暴力dfs

struct stans[maxm]

;int

main()

}for

(int i=

1;i<=n;i++)}

}int maxn=

-0x3f3f3f3f

;for

(int i=

1;i<=ans;i++)}

printf

("%d %d\n"

,cnt,maxn)

;return0;

}

NOI Online 3 入門組題解

洛谷傳送門 第一題還是一如既往的水233 沒什麼好說的。統計每一條訊號。對於乙個訊號,統計sos的數量,方法就是列舉每乙個長度為3的區間,如果這個區間是 sos 那麼就統計進去。取最大數量。有乙個小坑,就是最大可能有多個,要用vector儲存。include using namespace std ...

NOI Online 3 提高組 水壺

在乙個長度為 n 的序列中求出長度為 k 1 的最大子段。本題唯一的需要注意的一點是當 k n 時要輸出所有數的和,像我的考場 scanf d d n,k k if k n k n for int i 1 i n i scanf d a i for int i 1 i k i op a i for ...

NOI Online 3 入門組 第三題 買錶

題目傳送門 首先,我先確定一下暴力是怎麼做的。我在考場上做的暴力是使用dfs所做的,時間複雜度高到要爆。但是我這個蒟蒻還是用了。最終得分50。可是我還想ac啊,怎麼辦呢,那麼我就請教了dalao們,他們說 我諤諤,你連dp 二進位制都做不出來嗎?color boxed texttt 我諤諤,你連 d...