ACM訓練日記7.6

一、各題題意

  1. A. Three Friends
    在x軸上有三個點,對每個點只能操作一次,可執行操作:左移一個單位,右移一個單位,或者不動。求操作之後,兩兩之間距離的最小距離和。

  2. B.Snow Walking Robot
    四個字符表示四種移動方向,需要從(0,0)點出發又回到(0,0),問儘量少的刪去字符串中的一些字母並重新排列剩下的字母后能否使其從(0, 0)運動至(0, 0),除起點外其餘點僅能訪問一次,輸出最大移動次數,並輸出最大移動字符串。

  3. Yet Another Broken Keyboard
    給定一個字符串,和k個字符,問在字符串中有多少子串是給定的k個字符中的字符組成的。(長度爲k的字符串子串有k*(k+1)/2)

  4. D. Remove One Element
    給定一串數字,最多可以從這串數字中刪除1個數字(也可以不刪),問刪除後最長的嚴格單調遞增連續子串多長

  5. E. Nearest Opposite Parity
    對於每個位置的數i,如果i-a[i]>=1,那麼跳到下表爲i-a[i]的位置,如果i+a[i]<=n,那麼跳到下標爲i+a[i]的位置;求出對於每個位置的數,進行着兩種操作的最小的次數到達與當前數奇偶性相反的數,如果不能達到輸出-1。

  6. F. Two Bracket Sequences
    給定兩個只包含左右括號的序列 a 和 b,求最短的規則序列 s ,使得 a 和 b 都是 s 的子序列,輸出這個字符串s。

二、各題AC(補題)過程

我AC了三道題,但是感覺這三道題都挺水的…沒有涉及到任何的算法知識,只是簡單的小思維題。簡單的說一下思路:

  1. A. Three Friends
    最水的一道題目,看完題目就能出思路,找出最大值和最小值分別左移和右移就可以。

  2. B.Snow Walking Robot
    讀完題之後就很自然的想到,當l=r u=d時才能回到原點,所以要先統計l,r,u,d的個數,然後找出l r,u d中較小的數,計算就好了。還有一種特殊情況,僅僅上下或者左右移動時,只要兩步就ok。

  3. Yet Another Broken Keyboard
    也比較簡單,主要就是考察一個字符串的子串有多少個,題目都給了公式了,壞的鍵會分割出來的各個好的串,然後做法就是題目一開始說的在好的串裏挑選字串的公式 l*(l+1)/2

下面的題目就都是沒做出來的了:

  1. D. Remove One Element
    這道題是用dp做的,思路實現:
    dp【i】【0】: 代表以a[i]結尾的字串沒有刪除任何元素的最大長度。
    dp【i】【1】:代表以a[i]結尾的字串刪除了一個元素的最大長度。
    若當前的a【i】 > a【i-1】那麼可以更新2種狀態
    (1) dp[i][0] = max(dp[i][0], dp[i - 1][0] + 1); 代表當前沒有選擇刪除元素,那麼只能由上一個沒有選擇刪除元素的狀態轉移。
    (2) dp[i][1] = max(dp[i][1], dp[i - 1][1] + 1); , 代表當前選擇了刪除元素,那麼由上一狀態已經刪除了的轉移過來。
    若a【i】 > a【i-2】 那麼可以選擇是否刪除a【i-1】這個元素
    dp[i][1] = max(dp[i][1], dp[i - 2][0] + 1); 這個狀態就由dp【i-2】【0】 之前沒有刪除過元素的狀態轉移過來。

後邊這倆題,看題解都看的一臉懵…儘量去理解思路

  1. E. Nearest Opposite Parity
    這個去CSDN去查,發現用了啥超級源點、反向建邊,然後去詳細瞭解了一下。
    具體思路:
    對於每個位置的數跑最短路,每個位置的數一次最多到達兩個點,那麼就相當於給圖上的點連邊,然後就是求以這個點爲起點到達與這個點奇偶性相反的點的最短距離,dp[i][0]代表下表爲i的數到達奇數的最短距離,dp[i][1]代表到達偶數的最短距離,那麼反向建圖,反向建圖就是能求這個點能到達的點往自己的最短路。

  2. F. Two Bracket Sequences
    用了從未嘗試過的三位dp和dfs,比較新穎。
    dp[i][j][k]表示第一個串到第i個位置,第二個串到第j個位置時,左括號比右括號多k個的最少長度。
    每次新增一個位置的時候只有兩種情況,判斷一下是否出現過。用一個pre數組記錄每個情況新增的括號是什麼,和從那裏轉移過來的即可。並且注意左右括號之間的差不會超過200

三、訓練總結

這6道題比賽的時候都看了,每個題都試着做了做,最終只出來了三道最簡單的,b題是一道dp的題目,比賽的時候想到用dp做了,但我對dp都快有恐懼感了,一點做這道題的信心都沒有,看到dp就想把這個題目放了。剩下的兩個題,都沒啥思路就都放了。
有一段時間沒打比賽就感覺手生了不少,出題速度變慢了,還還出了一個小錯誤沒檢查出來,導致罰時了…所以下午就又找了幾道題做了一下,找找手感。又看了看樹的部分,瞭解了樹的基本概念和二叉樹。
狀態不是太好,明天加油!

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