A題:POJ 3277
給你n 個建築物,在一維的數軸上表示出來,ab表示座標範圍,h表示高度,問他們的正投影面積和是多少,就是去除重複的部分,當時認爲拍一下順序就可以了,但是後來發現沒那麼簡單,後來又想了一種比較簡單清晰的做法,就是把數軸上每一個單位都搜一遍,同時看看這一個單位距離時的有建築物覆蓋時最高的那個高度,然後求面積就好,但是數據量太大了,需要用線段樹離散化處理……
B題:POJ 3278
一條數軸,給定n,k;然後從n走到k,有兩種走法,一種是x->(x+1),或者x->(x-1) ,另一種是x->2*x , 問最少幾步,以前看過這個題沒敢做,要麼DP,要麼貪心,要麼搜索!
爲什麼沒敢做呢,沒明白當時的轉移狀態,x-2*x而不能從2×x到x,後來仔細一想,這不就是BFS嘛,從x能到x-1,x+1,2*x,先不要急着往其他位置轉移,因爲這是當前最短的距離,當前是k步,那麼下一步是第k+1步,只能從少的往多的地方轉移,不能從多的步數往少的步數轉移…… 明白了這一點,BFS就出來了……
注意,數組下標越界問題,還有N>K的例子,這是兩個小坑!
C題:開關燈問題POJ 3279
給定,m*n的矩陣,有0,1兩種狀態,每次可以講一個狀態翻轉到另一個狀態,同時,上下左右的狀態也跟着變化,問最少多少步能將狀態全部轉化成0,同時以矩陣的形式輸出,每位上的數字表示該位翻轉過多少次,當然被動翻轉的不算!
方法是枚舉第一行,然後不斷更新最優解就好了,要用到位運算……
給以張包含n個數字的紙條,問有多少種方式,將紙條建成兩段,使得每段上的和相同!
大水題啊,當時看到沒人做以爲自己讀錯題了,鬱悶,簡單枚舉就好了,注意數組不要越界!
給三個點的座標,座標都是integer, 問是否是直角三角形或者是amolst 直角三角形,所謂amolst是一定一個點一個單位的距離,並且座標仍然是整數,使得這三點成爲直角三角形; 用到兩個知識點,叉積判斷三點是否共線,向量的點積判斷是否是直角!
F題:
這個小題把自己卡了一下,就是說一條數軸上分成n段,第k段的座標範圍是[(k - 1)m, (k - 1)m + l],
然後某人從0開始跳躍,每次跳d格,然後在那裏能停下,不能停在這n段包括邊界上; 那麼就停在空隙裏唄……
注意數據範圍:
n, d, m, l (1 ≤ n, d, m, l ≤ 106, l < m)
當時沒仔細研究數據範圍,以爲n不大,直接就枚舉跳躍距離並且判斷是否某一段內,並且當前段也不斷往後更新…… 當然超時…… 後來一直沒明白哪裏超時,後來仔細一看才知道我枚舉的是點的左座標,一共有最多n段,但是每段有範圍不知道,實際上座標範圍很大的,貌似超int了,得用long long^…… 後來改用枚舉段數,最多n段就好了,同時判斷是不是在某段的間隙,用到整除…… 當前座標x/m*m……
注意此題有兩個坑,就是有時候這些線段之間沒有空隙…… 或者有空隙但是跳躍着沒有跳躍到空隙裏面,怎麼辦呢? 數軸是無現長的,他可以超越這n段啊……
給一個矩陣,每個都有顏色,改變最少的顏色使其滿足這樣的要求,相鄰的不能是同種顏色,每一行或者每一列最多用兩種不同的顏色……
如何操作這些矩陣使其滿足要求呢,把滿足要求的的矩陣寫出來,按照字典順序…… 注意一共有26種顏色,用26個小寫字母表示出來了……
貌似是DP,但是一直不會做 網上唯一找到的解題報告是小日本的:http://d.hatena.ne.jp/kusano_prog/20100618/1276884992