原创 1018 Public Bike Management (30分) (迪傑斯特拉+dfs)

思路就是dijkstra找出最短路,dfs比較每一個最短路。 dijkstra可以找出每個點的前一個點, 所以dfs搜索比較的時候怎麼處理攜帶和帶走的數量就是關鍵,考慮到這個攜帶和帶走和路徑順序有關,所以可以用下面的寫法,看代碼就

原创 PAT 1014 Waiting in Line (30分) 一個簡單的思路

這題寫了有一點時間,最開始想着優化一下時間,用優先隊列去做,但是發現有鍋,因爲忽略了隊的長度。 然後思考過後,覺得用時間線來模擬最好做,先把窗口前的隊列填滿,這樣保證了隊列的長度是統一的,這樣的話如果到某個時間,隊首的人已經服務完

原创 LeetCode 42接雨水 按行求解(差分+排序)

按行求解的思路比較清晰明瞭,但是這個方法的複雜度高達O(heightSize*sum(height[i])),幾乎高達O(N^2)。 但是也並不是不可以解決,經觀察我們可以發現,這個算法的缺點在於要遍歷每一個柱體的每一個高度,所以

原创 The Preliminary Contest for ICPC Asia Xuzhou 2019 G Colorful String(迴文自動機+dfs)

這題建立一棵迴文樹,然後用dfs搜索答案,但是有一點需要注意,就是打vis的標記時,如果標記爲1,那麼在好幾個節點都對同一個字符i打過標記,此時的搜索從字符i點回溯,回到它的父親節點,搜索其它的字符,回溯的時候把vis[i]標記成

原创 The Preliminary Contest for ICPC Asia Nanjing 2019 - D Robots(概率dp+拓撲排序)

這題概率dp + 拓撲排序可以寫 改天補解釋 #include <bits/stdc++.h> using namespace std; const int maxn=1e5+10; vector<int>vec[maxn];

原创 The Preliminary Contest for ICPC Asia Xuzhou 2019 B. so easy (unordered_map+並查集)

這題單用map過不了,太慢了,所以改用unordered_map,對於前面刪除的點,把它的父親改成,後面一位數的父親,初始化的時候,map裏是零,說明它的父親就是它本身,最後輸出答案的時候,輸出每一位數的父親就好了。 下面的程序可

原创 1022_Digital_Library (30分)

這裏提供兩種寫法, 其實都是一樣的,第一種比較快。 #include <bits/stdc++.h> using namespace std; map<string,set<string> > mp[6]; int main(

原创 The Preliminary Contest for ICPC Asia Xuzhou 2019 M. Longest subsequence(思維+序列自動機)

序列自動機跑s串 假設k爲s和t相同的長度,初始時相同長度爲0 取s串中大於t[i]的最左邊的位置,用n-tmp+1+i-1更新答案,tmp是最左端的位置 然後去t[i]相等的位置,走到下一位,如果下一位的位置不存在或者在tmp的

原创 P1030 求先序排列 (一個非常棒的寫法)

理論正確就是真正的正確,誤。。。 就是找嘛,找到每一個對應字符,然後對應的左右子樹的區間,然後就可以了。 #include <bits/stdc++.h> using namespace std; char mid[100];

原创 National Contest for Private Universities (NCPU), 2019 C Boxes(雙向鏈表)

題目中的要求如果x在y的左邊,不需要移動,x在y的右邊,2操作不需要移動。 有一個問題是,如果x與y相鄰,這時的swap操作變成了三個而不是四個,這點尤其需要注意,不然就會死循環。注意x是和y相鄰,這時應該考慮x在y的左邊還是在y

原创 試題編號: 201903-3 試題名稱: 損壞的RAID5

這題的數據未免也太水了,題目的意思好像默認是每塊磁盤裝載數據的長度是相等的。我寫了判斷每次取數據是否會超過每塊磁盤存的數據的長度,然而並沒有什麼卵用。交上去20分,寫了個數據測了下,如果要求的塊太大的話,這樣下面計算得出的對應磁盤

原创 二叉樹性質 n0=n2+1

假設樹的節點個數爲n,那麼n=n0+n1+n2,並且邊的個數等於n-1,那麼 n-1=n22+n1 則 n0+n1+n2-1=n22+n1,即n0=n2+1。

原创 HDU 1237 簡單計算器(棧+stringstream)

提供幾份代碼,這題的輸入可以用stringsteam處理,先處理乘除後處理加減,正常思路,但是後面統計加減法的時候,對棧的運用錯了,我用的時候相當於給它多加了幾個括號就錯了。 正確的簡單解法就是,加法,就讓正數入棧,減法就讓該數的

原创 CCF 試題編號: 201909-4 試題名稱: 推薦系統

這題是stl的綜合應用,map要想快,直接上unordered_map,這樣查詢接近O(1),是不是很嗨皮。 思路其實還是很簡單的,type+id做個Hash,由於set.insert的第一個返回值是指向該插入元素的迭代器,所以,

原创 洛谷P3809 後綴數組模板

把題讀清楚,題中的輸入是包括數字、大寫字母和小寫字母的。 初始化排名的時候可以把字符的ascii值作爲排位,因爲排名是可以並列的。但是最後的後綴排名是不可能並列的,因爲每一個後綴的長度不一樣。 基數排序的時候,注意處理並列的情況。