20200223 ABC 題解 by劉少瑞 楊熠辰

2022-05-29 05:18:09 字數 942 閱讀 6606

a:

給定乙個圖,圖中有且僅有乙個環,輸出每個節點到環的距離。

第一遍dfs,標記所有訪問點並記錄深度,若訪問到已標記的點,則該點和它的父節點為環上的點,分別記為u,v

第二遍dfs,從v觸發,逆深度一直訪問到u,這條路徑上所有點即為環

第三遍bfs,將環上所有點距離標為0,並挨個作為起始點進行bfs,求出來到其他點的距離

b:不難發現,滿足下列條件只一時皇后i可以吃掉皇后j

r[i] = r[j]

c[i] = c[j]

r[i] + c[i] = r[j] + c[j]

r[i] - c[i] + n = r[j] - c[j] + n (這裡 +n 是為了避免出現負數)

記錄一下每 行/列/與對角線平行的直線 上的最左邊與最右邊的皇后位置,對於每個皇后,判斷能否吃掉當前所在 行/列/與對角線平行的直線 兩端的皇后即可,統計個數。

即記錄所有 r[i]/r[i] + c[i]/r[i] - c[i] + n 相同的皇后中 c[i] 的最 大/小 值,記錄所有c[i]相同的皇后中 r[i] 的最 大/小 值。

時間複雜度o(n)

c:類似於求最大子矩陣的做法。

首先求乙個字首和,用 sum1[i][j] 表示第 j 列的星星數量的字首和,即

sum1[i][j] = sum1[i - 1][j] + star[i][j]

其中star[i][j]表示第 i 行第 j 列是否存在星星

列舉上下邊界 u/d 的同時列舉右邊界 i,尋找能使區域內星星數量大於 k 個的左邊界數目。

具體做法為列舉 u/d 的同時再維護乙個字首和 sum2,用 sum2[i] 表示從 (u, 1) 到 (d, i) 範圍內的星星數目,由於,那麼我們只要是找到 sum2 中小於等於 sum2[i] - k 的數的個數就行了。

由於字首和遞增,可以二分查詢。

時間複雜度 o(n^3logn)

20200306 ABC 題解 by 孫晨曦

今晚a題題解 n 100,直接暴力,開兩個string陣列a,b,對每個a i 找有沒有b j 未打過標記的 a i 有的話把a中第i個和b中第j個都打上標記,答案就是a中沒打標記的串的數量 b題題解 先讓ans 不插入元素時的總開燈時間。預處理0 a1,a1 a2,a2 a3,an m的差值 絕對...

DP練習1題解B

先上題目描述 poj2181 樣例輸入87 2184 356樣例輸出 因為有兩個方向 如果只開乙個陣列dp i 難以儲存前一步是上還是下 而考慮到只要奶牛不是傻子 其實是人不是傻子 最後一步一定是上 那麼容易想到是不是可以用dp i 儲存到當前最大的跳躍能量 最後一步為上 那麼需要考慮就是下的那步 ...

Codeforces 965B 題解報告

當k 1時,取第乙個 的座標即可 當k 1時,需要求出每乙個點在上下左右四個方向所能到達的最遠處,記為up,down,left,right,再取上下方向和左右方向的和的最大值,即 max 0,up down k max 0,left right k n,k map int,input split a...