原创 [補集轉換] Topcoder SRM563 DIV1. CoinsGame

枚舉兩個點,如果經過一系列操作使得一個留在棋盤上一個不在,那麼這個點對是有價值的 那麼合法的放棋子的方案一定包含至少一個有價值的點對 但是點對個數是 O((nm)2)O((nm)2) 的,直接容斥不行 補集轉化一下,可以發現如果點對 (

原创 [博弈] LOJ#2471. 「九省聯考 2018」一雙木棋

考慮暴力。 每次枚舉放哪個位置,設已經放了棋子的位置集合爲 SS ,fSfS 表示當前放置情況爲 SS 時,雙方採用最優策略後,兩個人的權值和的差。 那麼如果是菲菲,會選擇 fS+ai,jfS+ai,j 最大的,牛牛會選擇 fS−b

原创 [樹的直徑] Codechef March Cook-Off 2018. Maximum Tree Path

這個套路好像是計蒜之道里的一題 考慮枚舉gcd 把兩端點都是gcd的倍數的邊存下來,按照兩段點較小值從大到小排序 枚舉每一條邊,把這條邊加入圖中,可以用並查集維護出所有聯通塊的直徑,然後就好了 #include <cstdio> #inc

原创 [迴文串 線段樹] Codeforces Gym100032 ICL Cup 2012 K. Subpalindromes

題意是求一個區間裏迴文串的個數(出現位置不同的迴文串算不同) 用馬拉車算出以每個點爲中心的最長迴文串長度 考慮點 ii ,ii 點到以它爲中點的最長的迴文串的端點長度爲 xx 那麼它對一個詢問的貢獻是 min{i−L,R−i,x}min{

原创 [Contest] CodeChef March Challenge 2018

聽說CC也分div1 div2了 Mix the Colors 如果有重複的數,就把最大的數加到這個數上,所以答案是n減去不同的數的個數 Chef and Easy Problem 從高到低枚舉貪心。 Minions and Votin

原创 [數學] Topcoder SRM560 Div1 1000. BoundedOptimization

可以枚舉每個元素的值是上界、下界還是中間值,總共有 3n3n 種情況 若存在兩個元素 xi,xjxi,xj ,它們都取中間值,且xixjxixj 不在式子中, 那麼設表達式爲 axi+bxj+caxi+bxj+c ,可以發現最有情況肯

原创 [線段樹 博弈] 一道博弈題

障礙點數和詢問點數都是1e5 座標範圍爲1e9(實際數據既然有大於1e9的) 一個點的下方或左邊存在必敗點,則爲必勝點,否則爲必敗點 同一行的障礙會把這一行分成很多段,段與段之間是互不影響的。 考慮同一段的點,若其中一個點爲必敗點,則之

原创 [期望] Topcoder SRM561 Div1 1000. Orienteering

首先每條邊至多走兩遍,可以選出一條最長的鏈,這條鏈上的所有邊走一遍,其他邊走兩邊。 那麼答案就是 2|E|−|P|2|E|−|P| 其中 EE 是邊集,PP 是最長的鏈 這個的期望就是 2E(|E|)−E(|P|)2E(|E|)−E

原创 [DP] 【UNR #2】積勞成疾

fi,jfi,j 表示長度爲 ii 最大值爲 jj 的序列的答案 枚舉最大值的位置轉移就好了 #include <cstdio> #include <iostream> #include <algorithm> using nam

原创 [DP] LOJ#6307. 「雅禮國慶 2017 Day1」Clique

假設 xi>xjxi>xj 那麼 ii 和 jj 之間有邊的條件是 xi−xj≥wi+wjxi−xj≥wi+wj 把一個點看作一個區間 (xi−wi,xi+wi)(xi−wi,xi+wi) 那麼兩個點有邊的條件就是兩個點代表的區間不重