原创 poj2187 Beauty Contest(旋轉卡殼)

模板題 注意:避免凸包上三點共線 代碼 #include<stdio.h> #include<stdlib.h> #define eps 1e-10 struct Point { double x,y; Point() {

原创 BZOJ1040 [ZJOI2008]騎士(基環樹+樹形dp)

【題解】 出現了基環森林,還是考慮斷環爲鏈,然後dp 對每個連通塊,隨意找到環上一邊並斷開,記該邊的端點爲x,y 由於x,y的關聯斷了,所以要限制x,y的情況: 1. x不取,y取上  2. y不取,x取上  然後就是樹形dp:記 f[i

原创 [APIO2015]巴厘島的雕塑(數位dp)

【題解】 引用ZYF神犇一句話:"顯然位運算的極值問題都應該從高位向低位考慮。優先讓這一位爲0,如果行的話這一位就是0,否則就設爲1。"  設答案爲ans,從高位到低位枚舉 是否有使ans的這一位爲0的方案,注意到每一位是互相獨立的 

原创 BZOJ3680 吊打XXX(模擬退火算法)

其實我並不確定這是什麼算法。 代碼參考自hzwer巨神 #include<stdio.h> #include<stdlib.h> #include<math.h> #define eps 1e-6 double x[10005],y[

原创 BZOJ2428 [HAOI2006]均分數據(模擬退火算法)

【題解】 隨機10000次左右,每次隨機生成初始分組情況,判斷將某個元素移入另一組是否會更優,記錄全局最優答案  注意: 1. 自己用平方取中法弄的

原创 [POI2009]石子游戲Kam(階梯Nim)

【題解】 開始時,除第一堆外,每堆能取的石子都有限制,相當於第i堆只能取s[i]-s[i-1]個石子  在第i堆取走x個石子後,第i堆能取的石子少了x個,第i+1堆能取的石子多了x個  這相當於把x個石子第i堆移到了第i+1堆  因此,每

原创 poj2284 That Nice Euler Circuit(歐拉定理+枚舉)

歐拉定理:V+F-E=2 V的求法:將原有的拐點、線段不在端點處的的交點同一排序、去重,留下的點數就是V E的求法:原有線段數+新被分割出的,枚舉點和線段,若點在線段上,新被分割出的就多一條 注意:eps設爲1e-13掛了,設爲1e-1

原创 [NOI2007]項鍊工廠(線段樹)

【題解】 仔細探索題目性質: 1. "段數"具有類似結合律的性質,可以用線段樹維護,斷環爲鏈,但線段樹不易進行旋轉、翻轉操作  2. 考慮用函數記錄從初始到當前操作的變換方式,將對數列的變換轉化爲對詢問的處理     發現:若函數 f(x

原创 BZOJ3192 [JLOI2013]刪除物品(樹狀數組)

【題解】 將兩堆物品拼接到一起,物品的移動次數等價於中間的"斷點"的移動距離之和  通過排序預處理出每次刪除後的下一個該刪除的位置  每個物品代表一條長度爲1的線段,該物品刪除後,線段長度改爲0  然後兩點之間的距離就轉化爲了區間和,用樹

原创 BZOJ3173 [Tjoi2013]最長上升子序列(離線處理+Treap+LIS)

【題解】 離線處理: 第n個數的插入不會改變前n-1個數的相對位置,因此可以直接求得最終序列,第i次操作的答案就是僅含1~i的LIS  最終序列可以用Treap求得;由於僅含1~i的LIS = max( 僅含1~i-1的LIS , 以i

原创 BZOJ3190 [JLOI2013]賽車(單調棧+半平面交)

【題解】 數形結合思考: 畫出v-t圖像,若一條直線在一、四象限有不被覆蓋的部分,它代表的車就可以領跑  將直線按他們的斜率從小到大排序後,要維護一個下凸殼,由於一條新加入的直線,能覆蓋的左邊的直線是從右向左單調的,所以用單調棧來維護 

原创 BZOJ2957 樓房重建(線段樹)

【題解】 題目描述有誤,一棟樓房可見,應滿足其最高點到(0,0)的連線不與其他樓房相交  這個條件可以等價爲:它的斜率比之前的任何一個都大(相等也不行) 因此,只需O(logN)修改、O(logN)求出區間[1,n]內 比之前的任何一個數

原创 BZOJ1185 [HNOI2007]最小矩形覆蓋(旋轉卡殼)

【題解】 先求出這些點的凸包  可以證明,最小的矩形一定與凸包的邊有重疊  因此,像旋轉卡殼一樣,逆時針將凸包各邊掃一遍,在這個過程中用向量點積、叉積維護最上點,最左點,最右點,即可 注意這樣的寫法:Cross(ch[q+1]-ch[i+

原创 BZOJ2819 Nim(dfs序+樹狀數組)

【題解】 題目大意: 給定一棵樹,有兩種操作: 1. 修改一個節點的權值  2. 查詢兩點之間路徑上所有點的權值異或值  運用前綴的思想  首先xor運算有一個性質:Xor[l,r]=Xor[1,l]^Xor[1,r] 所以,設 Xor[

原创 poj3622 Gourmet Grazers(貪心+Treap)

【題解】 將牛和草分別按鮮嫩度從大到小排序  然後將牛掃一遍: 對於第i頭牛,將鮮嫩度>=b[i]的草的價格加入平衡樹,找出價格>=a[i]的最小的草,計入答案並刪除之  正確性分析:若i<j,則i與j的草交換後,答案不會更優  【代碼