JOI Open 2020 做題記錄

2022-05-30 16:12:13 字數 744 閱讀 6386

t1 「joi open 2020」家具擺放

菜雞拿到題毫無思路,看了下std一下就懂了

首先我們考慮把一些沒有用的點等效成家具,即這個點向下和向右都只能走到家具,或者是這個點上面和左面都是家具

這個可以利用bfs實現

那麼我們考慮斜線\(x+y=k\)上的乙個點\((x_0,y_0)\),這個點不被等效成家具當且僅當這個點是起點或終點或\(x+y=k-1\)和\(x+y=k+1\)這兩條斜線上都有與\((x_0,y_0)\)相連的點滿足他們不被等效成家具

那麼也就是說這種擺放方式是好的當且僅當每條斜線上都至少有乙個點不被等效成家具

於是我們維護每個點是否被等價成家具以及每條斜線上沒被等價成家具的點的個數即可

考慮在bfs中每個點只會入隊一次

時間複雜度是\(o(nm+q)\)

code

t3 「joi open 2020」發電站

wangdy巨佬教我做的題,他tql

我們發現如果兩個點間的開關都被開了,那麼他們之間的點的開關開不開都是沒有關係的,我們不妨認為他們全都開著

那麼我們在樹上實際上就是選擇的連通塊

記\(f[x]\)為選擇\(x\)號點的最小代價

那麼如果只選乙個兒子或者不選兒子的話,這個點的貢獻是正的

否則這個點的貢獻是負的

分類討論一下就行了

更新答案就考慮選的連通塊裡深度最淺的點是\(x\)即用\(f[x]\)更新答案

時間複雜度是\(o(n)\)

code

KMP做題記錄

題目太長不貼了 這道題很巧妙,給定乙個字串s,求最少在首尾新增幾個字元後,s變為乙個迴圈了n次的字串 n 1 假設我們有乙個迴圈串s abcabcabc 我們根據kmp求一次next陣列,就可以通過next strlen s 得到乙個迴圈節的位置從而求出迴圈節的長度,顯然,迴圈節能被s整除。如果s ...

8 25 9 25 做題記錄

2018.8.25 上午 1.ac 洛谷p1514引水入城 搜尋 貪心 2.ac 洛谷p3918 國家集訓隊 特技飛行 貪心 下午 3.ac 洛谷p1120 小木棍 資料加強版 搜尋 剪枝 4.ac 洛谷p1441 砝碼稱重 dfs列舉 01揹包 2018.8.26 上午 參加模擬賽 下午 1.ac...

8 25 9 25 做題記錄

2018.8.25 上午 1.ac 洛谷p1514引水入城 搜尋 貪心 2.ac 洛谷p3918 國家集訓隊 特技飛行 貪心 下午 3.ac 洛谷p1120 小木棍 資料加強版 搜尋 剪枝 4.ac 洛谷p1441 砝碼稱重 dfs列舉 01揹包 2018.8.26 上午 參加模擬賽 下午 1.ac...