原创 你若是天才,我便是瘋子————ACM一年總結

   自金華邀請賽結束後便一直有寫這總結的想法了,不過當時卻沒想那麼遠,只想做一下個小彙總,讓自己明白自己在哪裏有所不足,還能繼續前進。校賽過後,又隔了一個星期,終於開始提筆了,藉着world final 結束之時,我想爲自己的ACM之

原创 POJ 2355 Railway tickets

題意:在一條鐵路上有n個站點,要從a到b。火車票有3種,距離<=l1的c1元,距離<=l2的c2元,距離<=l3的c3元,其餘的不能買(如果相隔較遠,就只能通過中轉站來到達了) 題解:典型dp,dp[i]代表到達第i個站點的最小花費,然後

原创 POJ 3003 Spiderman’s workout

題意:蜘蛛俠爬牆鍛鍊,總共爬n次,能上能下,但最後必須落在地面,且中途不能爬到地下去。要按照最優策略即爬的最高點必須要儘可能低。 題解:典型DP題,dp[i][j]代表第i步爬到j高度時所爬過的最高點,同時用pr[i][j]代表上一次的高

原创 POJ 1868 Antiarithmetic?

題意:給定一個長爲n的(0,1,2....n-1)的排列,問是否存在等差數列。 題解:可以記錄每個數出現的位置pos[i],枚舉等差數列中間項以及公差,判斷(pos[i+d]-pos[i])*(pos[i-d]-pos[i])是否小於0。

原创 POJ 3437 Tree Grafting

題意:給出一個樹的中序遍歷的上下情況,求這棵樹的高度以及它轉化爲二叉樹後的高度。 題解:直接求樹的高度比較簡單,和求區間最大深度的算法一樣,就是統計一下就行了;求二叉樹的話,實際上這道題說了最多1w個結點,所以可以直接建一棵樹,然後再深搜

原创 POJ 3685

題意:N*N的矩陣,第i行第j列的元素爲i*i+j*j+10^5*i-10^5*j+i*j,求第M大的數。 題解:二分枚舉答案,算出整個矩陣中比它大的元素個數以及比它小的元素個數(枚舉j,二分枚舉i) #include<cstdio> #

原创 POJ 2373 Dividing the Path

題意:長度爲L的區間,有N頭牛有各自喜歡活動的區間(Si,Ei),噴水的噴頭只能安裝在整數點上,且它能噴到的半徑在[A,B]之間,現在要求:用最少的噴水頭不交叉的覆蓋整個L,並且滿足每頭牛喜歡活動的區間裏只有一個噴頭再噴。 題解:線段樹優

原创 POJ 1188 Gleaming the Cubes

題意:給定n個正方體,求他們的交體積。 題解:知道兩個長方體相交的算法就能很簡單的解出這道題,實際上兩個長方體交,就是取x1,y1,z1各自的最大值,以及x2,y2,z2各自的最小值就是了。 #include<cstdio> #incl

原创 POJ 1870 Bee Breeding

題意:這題圖看不太清,大意就是給定蜂巢上兩點,求他們的最短距離。 題解:首先定然是建一個好一點的系,實際上也說不上好壞,能表示就行。我的系是向下走x+1,反之x-1,向右下走y+1,左上走y-1,對於給定數字,轉換成座標的話先討論它是第幾

原创 不自損八百,何以傷敵一千——ACM兩年總結

    既然金華區域賽已結,剩下的泰國賽區也不過是去玩玩而已,那麼,也是時候做一個總結了。實際上距上一年度總結,也就半年有餘,不過,ACM或許應該以每一次的比賽作爲一個時段的終結點,亦是下一個時段的起始點,更何況,剛比完賽之後,或許是最容

原创 POJ 2888 Magic Bracelet

題意:用m種不同顏色的珠子連成一條長爲n的項鍊,其中,有k對珠子不能相鄰,問總共有多少種(mod 9973)n<10^9,m<=10 題解:組合計數也就burning和polya了,這題用的是Burning Side。 考慮在一種置換f下

原创 POJ 1821 Fence

題意:連續的N塊木板,有K個粉刷匠,分別坐在第Si塊木板前,每個粉刷匠不能移動位置,且最多能粉刷連續的Li塊木板(必須包括Si或者不要該粉刷匠),每個粉刷匠粉刷一塊木板可以得Pi塊錢,求總共的最大利益。 題解:dp[i][j]代表前i個粉

原创 HDOJ 1693

題意:給定N*M的矩陣,裏面有些有樹,有些沒樹(用0表示),問有多少種方法,通過任意個不交叉環路把樹全連起來(就是哈密頓迴路或者多個哈密頓迴路覆蓋所有非0數) 題解:插頭DP入門題,實際上,感覺插頭DP也就是狀態壓縮DP的一種特例而已。若

原创 POJ 3167 Cow Patterns

題意:給定長度爲n和m的兩個數字序列(數均小於等於25),用m去按照一定方式去匹配n,即:如果n中的區間[a,b]各數字的名次與m中各數字的名次完全一樣,那麼他們就是匹配的。問題:求所有的匹配個數及他們出現的首位置。 題解:KMP的升級版

原创 POJ 1436 Horizontally Visible Segments

題意:給定n條豎直的線段,求有多少個三元組,使得這三條線段兩兩可見(可見的定義爲這兩條線段可以連一條水平線段而不與任意其他線段相交) 題解:將線段按照x座標排序,判斷兩個線段是否可見,就是將後一個線段向左投影能夠在第一個線段上留下陰影。用