2020.7.6比賽總結

題目鏈接
感受:感覺最後把思路全想一遍能發現自己不少思維上的漏洞,比賽的時候想的確實沒那麼多,結束之後才能整理思路。爭取以後在比賽就能想好思路把。
語言方面:對於英語閱讀。對於我這個用日語高考的人來說確實還是一座大山。學了幾個月英語詞彙量着實跟不上那些學了三年英語的。必須要抽時間系統地學一遍英語,有了學日語的經驗英語學起來也確實比沒有語言基礎快不少,因爲可以少走許多彎路,就儘快學吧!儘量不拖後腿!

反思:想了想自己爲什麼只能做三道題,首先有一些題目的思路確實沒見過,就像那道圖論題。還有自己思維上存在很大的漏洞,就像那個dp題,最後沒有AC。可能一開始就覺得自己做不出來把。有點”自暴自棄“的意味了。

A題

題目大意:給你兩個括號字符串,要求構造一個新字符串,這個新字符串的括號序列要合法,並且子序列中還要包含給出的兩個字符串。
待補。。

B題

題目大意:給你一個長爲n的數組,最多去掉其中一個元素,找出其中最長的連續遞增子串。
思路:dp。
因爲最多去掉一個元素,所以只有兩種情況,要麼去掉一個元素,要麼不去元素。所以可以先求出不去掉任何元素的最長遞增子串長度來,用L[i]表示以i開頭的最長遞增子串,R[i]表示以i結尾的最長遞增子串,在求解過程中對答案更新。最後求出去掉一個元素的最長遞增子串。
因爲去掉第一個元素和去掉最後一個元素相當於上面以2開頭的和以n-1結尾的情況,所以直接從2到n-1枚舉去掉的元素。比如去掉第i+1個元素,那麼最長遞增子串就可以表示爲:以i結尾的子串和以i+2開頭的子串連接起來的長度。

在比賽中想成了子序列,到最後五分鐘才意識到自己出錯了,很遺憾。。。

C題

題目大意:給你三個數a,b,c。可以對每個數執行加一或減一操作,也可以不進行任何操作。要求執行完所有操作後,|a-b|+|a-c|+|b-c|的值最小。
思路:很水的數學題。。稍微寫寫就行了,儘量情況想的全面一點,避免不必要的WA。

D題

題目大意:給你一個長度爲n的數組a。每次可以對i點執行兩種操作:移動到i+a[i]或i-a[i](如果位置合法的話)。求每一個i移動到一個和a[i]奇偶性不同的位置的最少移動次數。
思路:反向建邊+多源最短路+超級源點
一開始想的是對每一個點跑一次bfs,但TLE在了第八個點,後來想想每個點的路徑可能和其它點的路徑有重合部分,寫一個記憶化搜索也行。。但bfs也能寫成記憶化搜索嗎。比賽後看的題解是反向建邊然後求最短路。果然是個沒見過的做法。。
最終思路是這樣的:創建兩個超級源點,一個是奇數點,一個是偶數點。這裏假設n+1是奇數點,n+2是偶數點。奇數超級源點連接所有奇數點,所以從奇數超級源點到任意一個奇數點的距離是1,然後設dis[i]表示從源點到i的最短距離。因爲是反向邊,所以這個值就相當於從i到源點的最短距離。對於每一個奇數點,最終肯定是要讓他跳到偶數點,既然不知道最終會跳到哪個點,那就直接跳到偶數超級源點,然後再從偶數超級源點跳到那個偶數點,最終結果減去偶數超級源點和偶數點之間的那個距離1。

E題

題目大意:給你兩個數n和k,分別表示序列s的長度和能使用的字母數量。然後問對s的(n+1)*n/2個子序列,能夠打出多少個。
思路:很順利一眼出思路然後AC
首先用一個map來表示能用的字母,因爲最多隻有26個,所以這個空間很小。然後遍歷序列s,遇到能用的字母就len++,遇到不能用的就加上len(len+1)/2,然後把len置爲0重新找子串。這個題給出了長度爲n的序列最多有n(n+1)/2個子序列,正好給了個提示。所以題目中的語言沒有廢話。

F題

題目大意:給你一個字符序列,字符的意義爲上下左右移動。要求:從(0,0)出發,並最終能回到(0,0)。並且在途中不能經過同一個單元格兩次。求最長的合法操作序列。
思路:因爲少了一個特判,WA了一下。不過問題還是不大的。
首先分情況討論:只能左右移動時,最終序列只能是LR或RL。只能上下移動時,最終序列只能是UD或DU。上下左右都可以時,因爲要使序列儘可能的長,所以把所有L,R,U,D都分別扔到四個vector中,爲了使得最後能回到原點,所以L的數量要等於R,U的數量要等於D,所以最後的序列長度就是取(min(L,R)+min(U,D))*2。按照一個矩形的形狀順時針或逆時針輸出就行了。

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