終 - 驗收

week9 - 東東學打牌

模擬題。主要注意每次牌型寫完測試,不要漏掉情況。

首先將讀入進來的手牌進行處理,A10JQK分別映射到數字上,然後進行每張牌排序,方便之後能夠列舉情況進行判斷。每張牌大小排序完成之後進行一手牌判斷,即判斷是否屬於某一種牌型。因爲已經對每張牌進行了排序,所以可以直接對於按照一手牌優先級的順序對某種牌型進行if判斷,如果是,那麼一手牌的最高就是當前情況,否則降級判斷加一個一手牌進行判斷。

最後判斷完成之後,存在每一個人的結構體中,進行重載之後的排序,按照一手牌的大小進行輸出即可。

week10 LIS&LCS

LIS是最長上升子序列,LCS是最長公共子序列。

求解LIS時,dp[i]dp[i]表示在結尾是a[i]a[i]的最長答案,所以dp[i]=max(dp[i],dp[j]+1)dp[i] = max(dp[i], dp[j] + 1),條件是當a[i]>a[j]a[i] > a[j]的時候更新,保證有序。

求解LCS時,用dp[i][j]dp[i][j]來表示aa序列末尾在ii之前,bb序列在jj之前的最優答案,轉移情況分爲兩種,當a[i]=b[i]a[i] = b[i]的時候,dp[i][j]=dp[i1][j1]+1dp[i][j]=dp[i-1][j-1]+1,就相當於加上了當前相等的這個元素;當a[i]b[i]a[i] \neq b[i]的時候,不能加加一,需要從之前的狀態取最大值,所以dp[i][j]=max(dp[i1][j],dp[i][j1])dp[i][j] = max(dp[i-1][j], dp[i][j-1])

week10實驗 團隊聚會

本題是模擬題。

先處理讀入的字符串,將所有時間轉化爲從1800.1.1開始經過的秒數,方便後序的比較。將每一件事都分成兩個部分:開始事件和結束事件,分別存在結構體中。

將結構體進行排序,按照時間大小。這樣我們就獲得了一個從前到後的時間線。

對時間線進行遍歷,每次遇到一個事件先判斷是開始事件開始結束事件,如果是開始,那麼就讓開始的人變爲忙碌狀態,如果是結束,那麼就釋放某些人。然後每次都檢查一下人數是否符合要求,進行記錄。

最後再把滿足要求的時間秒數轉化爲題目要求的輸出格式即可,記得補充前導零。

week14實驗 貓睡覺

本題的關鍵是對於跨夜番劇的處理,這裏的處理方法是找到第一個出現番劇的時間,記錄一個offset,把這個時間當做一天的開始,這樣所有番劇就是在一天之內的了。

將所有的時間換成從開始時間記錄的秒數,統一時間格式。

因爲輸入不保證有序,所以對番劇按照開始時間進行排序。

在最後增加一個終止時間,即爲第一個事件在第二天的時間,即加上一個週期1440。

然後對整個時間進行一個遍歷,如果能睡覺就睡覺,儘量減少工作的時間,如果遇到番的長度大於工作時間,直接輸出NO,否則將所有睡眠情況(滿足A)記錄下來,然後判斷睡眠的間隔即工作時間(滿足B)如果不符合條件那麼NO,否則輸出睡眠記錄即可。

week11-15中如果有做選做題,每週任挑一道

Week12 選做題1 區間 dp 判斷括號:給出一個括號串,求最長的合法的子序列的長度。

設置dp[i][j]dp[i][j]代表區間[i,j][i,j]內最多的合法括號數,長度都需要從自己內部已有的長度擴展而來。

s[i]s[i]s[j]s[j]滿足條件的時候,那麼dp[i][j]=dp[i+1][j1]+2dp[i][j] = dp[i + 1][j - 1] + 2;

然後又因爲,最大長度可能從這個區間內任何一個點組合而來,所以字節直接把整個區間的中繼節點都遍歷了,即爲k,取一遍最大值:$ dp[i][j] = max(dp[i][j], dp[i][k] + dp[k + 1][j])$。

最後的dp[0][len1]dp[0][len-1]即爲最終答案。

月模擬的路徑解析

首先需要共同處理的字符串是路徑中出現無意義.'.'/'/'

如果當前讀入的路徑不以/'/'開頭那麼是相對路徑,需要加上當前目錄。

然後進行分割字符串:如果分割出來是空跳過,如果是…那麼需要返回上一級,即棧結構退回一個,否則推入末尾。

處理完之後如果是空,那麼那麼是根目錄,特判一下。最後按照存下來的目錄添加/'/'輸出即可。

爐石傳說

用vector記錄其擁有的隨從,每當讀取到命令,如果需要隨從變化,來進行隨從編號的維護。

  1. 對於召喚隨從操作,即當做vector的插入操作即可。
  2. 對於隨從攻擊,需要考慮的是掉血之後隨從的死亡情況。
  3. 如果被攻擊方是英雄,那麼英雄可能死亡,如果死亡那麼攻擊方就是贏家。
  4. 結束end判斷即可。

元素選擇器

用結構體存儲標籤、id、層級、父親,記得要轉化大小寫,標籤全小寫,id區分大小寫。

對於三種元素選擇器:

  1. 標籤、id選擇器:對數組進行遍歷。

  2. 後代選擇器:
    首先遍歷一遍元素,找出所有最後一個標籤符合的元素,推入vector,這時記錄當前處理的層級。然後對vector中的元素進行處理,找到符合倒數第二個標籤的,以此類推,當前要維護當前處理的層級。

CSP-M3-T4 咕咕東學英語

對於這個題我們發現不合法的情況更好求,所以採取總數-不合法=合法的做法。

因爲只有2種字符,所以我們可以發現A…AB、BA…A、B…BA、AB…B不符合條件。所以我們進行字符串便利,正反各一遍,然後再加上重複計算的部分,最後用總數減結果,輸出即可。

CSP-M4-T4

考慮這棵樹的子結構,因爲是有序的,所以位置ii之前的是ii的左子樹,之後的是右子樹。

用區間dp構建可行二叉搜索樹,dp[i][j]dp[i][j]代表區間[i,j][i,j]是否構造這麼一顆二叉搜索樹。l[i][j]l[i][j ]表示以第 jj 個數爲根,從第 ii 個數到第$ j 個數是否可以構成一棵二叉搜索樹。r[i][j]示以第 i$ 個數爲根,從第 ii 個數到第 $j $ 個數是否可以構成一棵二叉搜索樹。

狀態轉移:if(gcd(a[i],a[j])>1)dp[i][j]=dp[j][i]=1;if (gcd(a[i],a[j])>1) dp[i][j] = dp[j][i] = 1;

當$l[i][k] && r[k][j] $時,

if (dp[i - 1][k]) r[i - 1][j] = 1;

if (f[k][j + 1]) l[i][j + 1] = 1;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章