第一天,王聿中老師出的題目比較簡單,t1很水,t2是個簡單的dp,t3還是有一點意思的。在網格圖中刪掉若干條邊,使得所有格仔都聯通,求刪掉的邊的長度和最小為多少。很容易發現這是乙個最小生成樹問題,但點和邊數量非常大,不可能完成一般的建圖,然後發現這是網格圖,同一行的豎邊都相等,同一列的橫邊也都相等。克魯斯卡爾每次找最短的邊e(u,v),若u,v在不同的連通塊,則取該邊。所以在本題中如果要取某一條邊,與它長度相等的邊如果可以去就要取,因此每一次可以打通一列或一行,這樣只要記錄下有幾行幾列已經被打通,就可以統計出答案。乙個對克魯斯卡爾的變形,也比較容易。1個多小時就把比賽ak了,一共10人ak,不過之後的比賽再也看不到300了。
題目也不算難。
t1依然是水題,想怎麼做就怎麼做。
t2是一道不錯的題目,題目大意:有4組數,每組n個,每組個選乙個數組成乙個四元組,使得四個數相乘模p等於1,保證p是質數。n<=1000.
最暴力的方法是n^4次列舉,顯然不行。這個規模應該要o(n^2)或o(n^2 log n).
也就是說只能列舉兩個。於是可以先列舉前面兩個,把它們記下來,排序,然後列舉後面兩個,求乘積的逆元,在那個有序序列中查詢。這樣子時間複雜度o(n^2 logn).
這種方法叫做meeting in the middle,是乙個重要的優化方法。
t3是一道有趣的題目,題目大意:一條長度固定的貪吃蛇(l<=8),在n*m的網格圖上(n,m<=20),網格圖上有k個障礙物(保證l+k<=n*m),任意時刻蛇不能有兩節在同乙個格仔上。給定蛇的每一節的初始位子,問蛇頭到目標位置最少要多少時間。
看到資料比較小,大膽地寫了乙個玄學搜尋,加了一些靠譜的小優化,程式跑得飛快,自己出的大資料可以在0.01秒內跑完,以為穩了,打了接近兩個小時的掃雷……結果tle了……50分,還好。
不要玄學這種東西,我們來看正解。蛇當然是連續的(不然怎麼活),在網格圖中只有4種方向,所以蛇頭的位置和每一節彎曲的方向(狀壓)就可以確定所有的狀態。20*20*4^7次,可以接受。寫乙個寬搜,用乙個陣列記錄每乙個狀態是否到過,於是乙個時間複雜度穩定的演算法就出現了。其實還可以優化,但不是很有必要,除了第二個方向,後面每一節都只有三個可能的方向,所以只要20*20*4*3^6個狀態。
t1是個模擬題,跳過。
t2比前面兩個t2要難得多。題目大意:有乙個n*m的網格,每乙個格仔是「.」或「*」,求乙個由「.」的格仔組成的矩形周長最大是多少。這道題似乎與這道題差不多(好像是一模一樣……)
房屋建造
題目描述
小明是一位有名的建築師。他買了一塊地來建造房子。不幸的是,這塊地的地勢是會變化的,它有乙個可變仰角。
土地的形狀是乙個長方形,n公尺寬m公尺長。它可以被分為n*m個方塊(見下圖)。小明的房子也是乙個長方形,房子的邊與土地的邊都是平行的。為了房子不會倒塌,小明建房子的土地必須都是同乙個地勢的。
上圖中小明建立房子的其中兩種是紅色和藍色覆蓋的區域。計算小明可以有多少種方式來建立他的房子。
輸入輸入第一行包括兩個整數n和m(1≤n,m≤1000)。
接下來的n行中每行包括m個整數ai,j(1≤ai,j≤10^9),表示每一塊土地的地勢高度。
輸出輸出乙個整數,表示小明最多有多少種建立房子的方式。
樣例輸入
5 3
2 2 2
2 2 1
1 1 1
2 1 2
1 2 1
4 3
1 1 1
1 1 1
2 2 2
2 2 2
樣例輸出
提示【資料範圍】
20%的測試資料中,n,m≤50。
60%的測試資料中,n,m≤500。
解題思路:預處理出以每乙個格仔為底的最長的連續「.」的長度a[i][j]。然後列舉每一行,用單調佇列預處理出每乙個點向左、向右的最長的距離l[j]、r[j],使得距任意離內的a[i][k]>=a[i][j],然後列舉每乙個點ans=max(ans,(l[j]+r[j]+1+a[i][j])*2)
暑期培訓總結
有句話是這麼說的 痛苦是軟弱離開身體的感覺 現在大可改編成 糾結是大腦感知到無知存在時的感覺 在之前的部落格或者是日誌裡面我都提過,接觸新的東西時,入門前會有一段糾結時期,這段時間裡面,大腦對於相關問題完全是模糊的,生活本質其實就是這樣,糾結中堅定步伐。今年暑假本打算與xqg還有lxn一同騎行回合肥...
140802暑期培訓 txt
1 pow函式 include pow x,y 用來計算以x 為底的 y 次方值,然後將結果返回。注意 pow函式返回值為double型 printf 32.01 1.54 f n pow 32.01,1.54 他也可以計算小數的小數次方 2 動態規劃 動態規劃過程是 每次決策依賴於當前狀態,又隨即...
140804暑期培訓 txt
1 母函式 母函式,顧名思義,就是母親,那就說明,在這個函式裡面還有兒子,即子函式。說白了,就是子函式可以看作是母函式的乙個子集。而如何把這些子函式用乙個母函式來表示呢?即所謂的通項公式。通俗理解為 母函式就是乙個多項式前面的係數的乙個整體的集合,而子函式就是這個多項式每一項前面的係數。母函式有普通...