1. 程式人生 > >2018年十月水題總結

2018年十月水題總結

10月和11月主要是DP和圖論,稍微去CF做做雜題提高思維活躍度和程式碼能力,預計12月和1月是資料結構和數學,二月及以後是字串,現在還是把基礎打牢吧,不能像高中那樣畸形發育了。

2018.10.31

POJ 1273 網路流 模板題,計導課看一本翻譯的很爛的書看不下去了水了一道題

發現一個網路流專題:網路流24題 水了幾道

網路流(1/24)飛行員配對方案問題 裸的二分圖

網路流(2/24)似乎是個結論的貪心,之前在BZOJ上做過的來著。網路流的做法是求完平均值之後建一個超級源點和匯點,然後少的向源點要,多的向匯點發,這兩個不要錢,相鄰的點還有1和n之間連邊,費用為1,最大流不限,跑一邊最小費用流。

網路流(3/24)軟體補丁問題 用SPFA進行轉移的狀壓DP,狀態是當前剩餘的病毒,和網路流半毛錢關係沒有。

網路流(4/24)魔術球問題:看著像貪心,寫了一下貪心居然過了,查了題解看到網路流的做法貌似就是一個花裡胡哨的貪心

網路流(5/24)孤島營救問題:壓縮鑰匙的狀態BFS,用vis[x][y][sta]x,y位置,鑰匙有sta時有沒有到過,記錄每個位置的鑰匙,還有往邊上走有沒有牆。

坑人的專題,做完之後除了網路流,其他全會了。

2018.10.30

今天去USACO逛了一下,體驗極差,感覺給測試資料是唯一令人欣慰的地方,可能是我英語不好吧。USACO現在做到的題太水了,就不寫上來了。。浪費了一些時間。

NOIP2016換教室 Floyd跑出所有教室間的最短路供查詢 dp[i][j][0/1]表示考慮到第i個課,還剩j次機會,0表示不換,1表示換(但是不一定成功)的期望。

轉移方程dp[i][j][0] = min(dp[i-1][j][0]+dist[C[i-1]][C[i]],(dp[i-1][j][1]+dist[C[i]][C[i-1]])*(1-K[i-1])+(dp[i-1][j][1]+dist[C[i]][D[i-1]])*K[i-1]);
            dp[i][j][1] = min(dp[i-1][j-1][0]+dist[C[i-1]][C[i]]*(1-K[i])+dist[C[i-1]][D[i]]*K[i]+(dp[i-1][j-1][1]+dist[C[i-1]][C[i]])*(1-K[i-1])*(1-K[i])+(dp[i-1][j-1][1]+dist[C[i-1]][D[i]])*(1-K[i-1])*K[i]+(dp[i-1][j-1][1]+dist[D[i-1]][C[i]])*K[i-1]*(1-K[i])+(dp[i-1][j-1][1]+dist[D[i-1]][D[i]])*K[i-1]*K[i]);

看著挺累人,但是一遍寫出來沒出問題,就是被double卡了一下,這道題是回寢室寫的,可能在圖書館腦子和手會被凍住轉不起來,回寢室暖和了就回到了正常水平,怪不得毛子那麼厲害

洛谷P4147 求最大子矩陣的板子題,跟著複習了一下單調棧和懸線法,有關方法詳見 https://wenku.baidu.com/view/728cd5126edb6f1aff001fbb.html

感覺洛谷真的友好,做著一點也不費勁,今天主要是浪費在USACO上的時間太多了。

2018.10.29

POJ1179 Polygon 序列DP,展開成兩倍,坑點在於負負得正,所以需要記錄最小得分和最大得分。方程:dpmax[i][j] = max{dp[i][k]+dp[k][j]}  dpmax[i][j] = max{dpmax[i][k]*dpmax[k][j],dpmin[i][k]*dpmin[k][j],dpmin[i][k]*dpmax[k][j],dpmax[i][k]*dpmin[k][j]} dpmin的同理。

POJ1178 Camelot Floyd處理騎士能走的所有點對最短路,列舉目的地,與騎士匯合點,匯合的騎士,取最小值。

ZJOI2007棋盤製作 延長邊一定是越靠近根越好,兩邊DFS,第一遍得出每個點往下最大的深度deep[],第二次傳一個深度dep,在這個點需要延長的長度即為deep[now]-dep,加到答案裡,然後訪問所有子節點,訪問時候傳下去dep-邊長-(deep[now]-dep) = deep[now]-邊長。

ZJOI2007棋盤製作,橫著統計一遍,豎著統計一遍最大子矩陣。

WA真的蛋疼,機考弱智題WA了個爽,我是個弱智。今天又WA了一晚上。

2018.10.28及以前

好久沒有做演算法競賽的題目了,最近才開始撿,是想為明年的校賽做點準備的。感覺現在自己虛的不行啊,先不說思維能力,好多小細節現在都注意不到導致WA好多次。

大概總結下這兩天水的題目吧,之後難度會一點點上升的。(其實是想提高英語閱讀速度

CF1064B 求 a(ax)x=0a−(a⊕x)−x=0 的解的個數,按位考慮,發現當前位為0,答案不變,為1,答案乘二,統計。

CF1066B 一排屋子排成一個數組,其中某幾個位置有加熱器,每個加熱器都可以加熱一個固定的範圍,開啟最少的加熱器加熱所有房間。每個屋子優先考慮使用能管到它的最右面的加熱器,

如果右邊沒有,就用左面最靠右的加熱器,要是還沒有。。GG。

CF1066C q個操作/查詢,把一本編號為id的書放在最左邊或最右邊,詢問把編號為id的書拿出來最少先拿出來左邊或右邊的幾本書。其實就是一個數軸,記下座標。

CF1066D m個大小為k的箱子,一排n個物體從左到右想要裝進箱子裡,裝不進去就丟掉最左邊的,問最多裝幾件。二分。

CF1066E 給了兩個巨大的二進位制數a和b,不停的將答案加上a&b然後將b向右移動一位,輸出答案取模,考慮a的每一位&了b中多少個1然後把總和加起來就是答案,字首和統計b從高位到低位1的個數。

CF1070F 兩個人辯論選觀眾,有4種人分別支援雙方,最終選出來支援任意一方的人都要過半,每個觀眾有影響力,選出來一些觀眾最大化影響力。11的全都要,10和01的排序後要相同的最多人數,剩下的

和00的放在一起排序,選出來不超過11的人數。

CF1073C 一個機器人每次只能向上下左右的某個方向走一步,給了一個走路的指令序列,可以修改一些來使機器人走到目的座標,問修改序列的標號最大的減去最小的是多少。指令序列長小於要走的曼哈頓距離或者減去曼哈頓距離是個奇數就走不過去。

二分答案判斷即可。

CF1031B 分別列舉兩位情況判斷

CF1016B 給兩個字串s和t,每次詢問s中l到r出現了幾個t。kmp加字首和,求的時候注意r-t.length+1和l的關係。

CF2016C 給一個兩行很多列的格子,從左上角走,每個格子恰好經過一次,每個格子得分為它的分數乘以到達的時間,求最大得分。發現路徑是蛇形和環形相結合。開四個字首和,預處理蛇形從左向右,順時針環形和逆時針環形從右向左,豎排的從右向左

的字首和陣列,列舉蛇形走的位置計算。注意開long long。

完全是在練習英語

感覺斷檔了,更難的題目現在思考起來有些困難,可能還是要繼續適應。

不知道為什麼,每次CF比賽的時候這邊就連不上。還是老老實實做VT吧。

明天第一次機考,感覺要跪。