USACO2 4題目簡析

2022-06-02 10:21:13 字數 1471 閱讀 5427

題意:約翰和奶牛在10*10的地圖上,地圖上有一些障礙物,他們行走的方式如下:如果正前方沒有障礙物,那麼往前走,否則順時針旋轉90度。開始約翰和奶牛都朝北。如果某次行動後,約翰和奶牛處於同一位置,那麼就表明約翰抓住了奶牛。問:約翰能否抓住奶牛,如果能,輸出抓住的步數。

由於狀態只與約翰的位置、奶牛的位置、約翰的朝向、奶牛的朝向有關,所以開乙個六維標記陣列進行標記,然後純模擬即可,如果發現約翰和奶牛處於同一位置,輸出當前步數,如果發現某個狀態已經出現過,輸出0。由於總狀態數為10*10*4*10*10*4=160000,所以可以a掉此題。

題意:給出乙個迷宮高h(1≤h≤100),寬w(1≤w≤38),注意給出的迷宮是這樣的(乙個3*5的迷宮):

+-+-+-+-+-+

| |

+-+ +-+ + +

| | | |

+ +-+-+ + +

| | |

+-+ +-+-+-+

保證迷宮只有兩個出口,且所有位置都能到達出口,每個點到達出口的最短距離中最長的是多少?

由於出口只有兩個,可以使用bfs解決本題,即對於每個出口做一次bfs,計算出其到達各點的距離,這樣每個點到出口的最短距離就是到達兩個出口中的較小的那個。

然後列舉所有點找出最大值即可,總時間複雜度o(4wh)。

注意實際答案是(ans+1)/2。

題意:有n個牧場(n≤150),給出其座標。有一些牧場之間有連邊。稱乙個連通塊的直徑為其中最遠的點對的距離。保證連通塊的數量≥2,現在要連線兩個不同連通塊的牧場,使得新連通塊的直徑最小,輸出這個直徑。

首先跑一遍floyd,得出兩兩點對之間的距離。

然後你要確定連通塊,可以利用上一步的結果,即對於點i,所有與它距離不為oo的點都屬於同一連通塊。然後你就暴力求出每個連通塊的直徑。

然後窮舉要連線的牧場i,j,並找到i所在連通塊中距離i最遠的點x,以及j所在連通塊中距離j最遠的點y,那麼新牧場的直徑就是max(i所在連通塊的直徑,j所在連通塊的直徑,f[i][x]+f[j][y]+f[i][j])。

總時間複雜度o(n^3)。

題意:牧場的編號從'a'..『z』以及'a'..'y',其中大寫字母表示其中有牛,穀倉編號為『z』,給出一些雙向道路,輸出哪頭奶牛能最快到達穀倉以及它需行走的距離。

可以以『z』為源點做一次單源最短路,然後o(n)尋找距離其最近的點。

由於點數最多52,所以floyd也可以0ms跑過。

題意:給出乙個分數,輸出它的小數形式,例:

輸入:1 3  輸出:0.(3)

輸入:2 2  輸出:1.0

輸入:22 5   輸出:4.4

要求每行輸出76個字元。

關鍵問題是如何確定迴圈節。對於除到某一位的狀態,可以用當前數字以及除完後剩餘的數來表示,這樣總的狀態數最多是10*100000=1e6種,所以使用乙個標記陣列進行標記,邊做邊標記當前狀態並記錄當前數字,如果發現某個狀態重複說明找到迴圈節,或者剩餘除數為0表明能夠整除,此時需退出迴圈,然後輸出即可。

USACO 2 4 牛的旅行 最短路

農民john的農場裡有很多牧區。有的路徑連線一些特定的牧區。一片所有連通的牧區稱為乙個牧場。但是就目前而言,你能看到至少有兩個牧區不連通。這樣,農民john就有多個牧區了。john想在農場裡新增一條路徑 注意,恰好一條 對這條路徑有以下限制 乙個牧場的直徑就是牧場中最遠的兩個牧區的距離 本題中所提到...

leetCode題目簡析

給定乙個salary表,如下所示,有m 男性 和 f 女性的值 交換所有的 f 和 m 值 例如,將所有 f 值更改為 m,反之亦然 要求使用乙個更新查詢,並且沒有中間臨時表。例如 id name salary 1 a m 2500 2 b f 1500 3 c m 5500 4 d f 500 執...

NOIP2016題目簡析

t1 玩具謎題 直接模擬即可,對於每次操作直接計算出下一位置,時間複雜度o m t2 天天愛跑步 乙個簡單的做法 你可以預處理計算出所有si和ti的lca,然後對於每個觀察員,判斷它是否在si到ti的道路上,如果是計算出到達它的時間,如果與其觀察時間相符,則其能觀察人數 1。但時間複雜度o nm 要...