P4750
如果正着的矩形,顯然可做,我們考慮斜着怎麼做,首先這裏有座標轉換公式,設座標軸逆時針旋轉 \(\theta\) 角,設原來座標爲 \((x,y)\),旋轉之後的座標爲 \((x',y')\)
這裏我們對斜着的矩形旋轉座標軸,注意到不用保證長度相等,因爲這樣會出現無理數,所以我們用 \((x+y,y-x)\) 來進行座標變換。
在兩個座標系中分別做完之後,我們考慮合併兩個座標系。
像這樣:
每個格子被我們分成 \(4\) 個三角形,而我們只需要考慮四個三角形哪些被覆蓋了,注意到我們可以建立斜正方形與正正方形之間的座標映射,然後分類討論就可以。
AGC052B
自己最多隻能想到如果是序列上的話,一次操作等價於交換前綴異或和。
如果是樹上的話,我們給每個點設一個權值 \(a_i\),並且滿足 \(a_u\ xor\ a_v\) 爲 \(w\),接下來考慮一次操作實際上是交換這條邊兩邊點的權值。
我們可以很快的構造出一組 \(a_i\) 爲某個點到根上路徑的異或和,這裏假定 \(a_i\) 爲根。並且似乎只有這樣的一組解,如果我們假定根的 \(a\) 爲 \(0\) 的話。
一個思路是在 \(b\) 中枚舉根,然後看兩棵樹的權值是否爲排列。
不過不用這樣,我們在第二棵樹中也向 \(1\) 做異或和,這樣 \(x\) 到根的異或和實際上是它們向 \(1\) 異或值異或起來。
這個值可以求出來,因爲 \(n\) 爲奇數,所以我們直接把所有的值異或在一起,然後看這個值是否出現,以及異或完之後是否爲排列即可。
P6071
這個題距離正解已經很近了,自己的思路錯在分類討論沒有討論全。
如果 \(l,r\) 中有些點是 \(p\) 的後代,而並不是全部,那麼答案顯然是 \(0\)。
現在考慮 \(lca\) 和 \(p\) 之間的關係,如果是祖先後代關係,如果 \(p\) 爲祖先,那麼答案爲 \(p\) 到 \(lca\),如果 \(lca\) 爲祖先,那麼我們設 \(x\) 爲深度最深的滿足包含 \(l,r\) 中的點,並且是 \(p\) 的祖先的點,那麼答案應該爲 \(p\) 到 \(lca\) 的距離。如果不是祖先後代關係,那麼答案就是 \(p\) 和 \(lca\) 之間的距離。
我們只需要線段樹合併的時候用主席樹記錄每一棵線段樹就可以詢問每個節點的兒子信息,找到 \(lca\) 可以用重鏈剖分,因爲信息區間可加,所以一段連續點的 \(lca\) 用線段樹可以維護。找 \(x\) 可以在重鏈上條,如果一條重鏈滿足條件,在上面二分即可。