聯賽前第四階段總結


這次終於進小機房了QwQ,可是這樣就得離開葉隊了,啊,這可太不好了呀
雖然小機房沒有氛圍吧,但是有種不一樣的感覺

聯賽模擬測試14

A 虎

  • 看到這道T1我十分蒙,沒啥思路,尤其是不知道那些可以不用變成黑邊的怎么處理,然后就打了父親都是1的和全是黑邊的,后者還打掛了。
  • 其實這道題和昨天的Graph特別像,也是偶數條邊就不用往上傳,奇數條邊,如果x能傳就傳上去,一個Dfs就搞定了。
bool Dfs(int x) {
    bool b = 0;
    for (int i = head[x]; i; i = e[i].next) {
        int y = e[i].t;
        if (!Dfs(y)) continue;
        if (b) ans++;
        b = !b;
    }
    if (b && !w[x]) ans++;
    return ((w[x] == 1) || (b && w[x] == 2));
}

int main() {
    n = read();
    for (int i = 2; i <= n; ++i) {
        Add(read(), i);
        int y = read(), z = read();
        w[i] = !z ? 2 : y ? 0 : 1;
    }//w為0表示不能改變,1表示需要改變,2表示可以改變
    Dfs(1);
    printf("%d\n", ans);
    return 0;
}

B 陶陶摘蘋果

  • 一開始看錯題了以為是求最長上升子序列,一看20分5000的數據\(O(n^2log(n))\)就不想做了,但一看還有3個小時,T3又那么惡心,就肝這道題。寫完最長上升子序列后突然發現讀錯題了,直接O(n)掃m遍,這就很可做。
  • 后來想了想怎么優化,就想到了改一個點都會改那些,發現對前面是沒有影響的,然后在改的地方后面找第一個大於前面最大值的點,預處理出來這個點到最后的答案就好了
  • 然后我就開始了無盡的預處理,先O(n)的把1~i的答案求出來,在用ST表+二分查找+線段樹區間加把i~n的答案求出來,最后詢問的時候在用二分回答。
  • 最后切掉了這道題,說實話感覺真不賴

C 開心的金明

  • 一看這麻煩的題面整個人都傻了,瞎打了個暴力就去肝T2了,最后得了20分,就是兩個樣例
  • 正解貪心,模擬一下過程。
  • 用set維護結構體,表示電腦的價格和數量,每次都買最便宜的,如果超過e限制,就每次刪最貴的,

D 笨小猴

  • 這個題之前學長講過,當時挺在狀態,想了一會就想出來了,就是按a從小到大排序,然后每兩個都選b值大的那個,最后把a值最大的選上,一定能保證b值符合條件,然后畫個柱狀圖找最差情況模擬一下就知道這是對的。


聯賽模擬測試13

A Tree

  • 考試時用最大生成樹的思路瞎推了推,發現可能是邊權加起來,然后對拍起來沒啥問題,就這樣了A了

B Permutation (Unaccepted)

  • 能往后放的就往后放,本來以為是TLE50分,結果是WA了,看別人都90分,問了問葉隊,得多跑幾遍,然后我加個while(1)就90分了QwQ

C Graph

  • 這道題前20分的點沒過,就把樹的點過了。
    其實其它圖的解法和樹的非常類似,對於每個聯通塊先搞出一棵Dfs樹來,反祖邊就把祖先拆開一個點成為子節點,然后按照樹處理就好了(不用真的拆開,只是一種思路)
bool Dfs(int x, int fa) {
    dfn[x] = ++dfc;
    int a, b = 0;
    for (int i = head[x]; i; i = e[i].next) {
        int y = e[i].t;
        if (y == fa || dfn[y] > dfn[x]) continue;
        if ((dfn[y] && dfn[y] < dfn[x]) || Dfs(y, x)) {
            if (b) ans[++cnt] = (Node) {a, x, y}, b = 0;
            else a = y, b = 1;
        }
    }
    if (fa && b) ans[++cnt] = (Node) {a, x, fa};
    return !b;
}

D 十字綉

  • 這個題都寫過題解,但考試的時候只回想起了一丟丟,暴力還不會打,於是愉快的拿到了10分的好成績,


晚間測試5

真是越考名次越低,總名次都掉到第8了 QwQ

A 容易題

  • 考場上發現將每位能選的數的和相乘就是答案,拍了拍沒啥問題,然后100%的數據就用map搞了搞就過去了。

B 兔子與櫻花

  • 看了半天沒看懂題,瞎打了個暴力水了20分。
    正解是貪心,從葉子節點往上搜,每個節點的子節點能刪就刪(先按貢獻從小到大排序)


聯賽模擬測試12

爆了20分。

A 松鼠的新家

  • 樹上差分板子題。

B trade

  • 堆優化反悔貪心,每次找前面最小的,如果有比當前小的,算在答案里,並且另加入一遍這個點的價值,如果后面選了這個點,就相當於在這時買了又賣。

C sum

  • 本來1~4,11~16都可以暴力碾過去,但是寫的時候沒注意,11~14單獨寫了一種方法,然后不知怎么就掛了,只拿了40分
    因為從\(S_{n, m}\)可以O(1)得推到\(S_{n,m+1},S_{n,m-1},S_{n+1,m},S_{n-1, m}\),詢問可以離線,可以將詢問想成區間,這樣就可以用莫隊來解決,然后葉隊手把手教了我奇偶優化莫隊(葉隊太巨了!)。

\[S_{n,m+1}=S_{n,m}+C_n^{m+1} \]

\[S_{n,m-1}=S_{n,m}-C_n^m \]

\[S_{n+1,m}=2\times S_{n,m}-C_n^m \]

\[S_{n-1,m}=\frac{S_{n,m}+C_{n-1}^m}{2} \]


D building (Unaccepted)

  • 前4個點沒對,5~8個點對了可真是神奇,前20分的代碼還改了一次,但還是掛了,只拿了20分。


晚間測試4

A 字符串

  • 一看見題目上說1的個數不能少於0的個數,那就往卡特蘭數上想。把坐標系畫出來后不知道到對稱點的方案樹怎么求,只能打了個表,算出來結果是\(C(n+m,m)-C(n+m,m-1)\)

B 哪一天她能重回我身邊 (Unaccepted)

  • 暴力Dfs的時候回溯的時候逗號達成分號,然后僅有的20分沒了...


聯賽模擬測試11

這次狀態還可,掛了-20分
純暴力選手Rank3???

A One

  • 線性約瑟夫問題,考試的時候打了30分暴力,前7名就我30分,別人都是60,100。
    然而在網上並沒有找到這類題的題解,就問了xyx和lzs,正解是推式子,從0開始編號,最后剩下一個肯定是0號,然后推出在2個人的時候是幾號,最后推出在n個人的時候是幾號
    int x = 0;
    for (int i = 2; i <= n; ++i)//當前序列有多少人
        x = (x + n - i + 1) % i;
    printf("%d\n", x + 1);

B 磚塊

  • 大模擬,12種情況稍微想想就出來了。

C 數字 (Unaccepted)

  • 考場上想了個錯誤的80分寫法,對拍拍出來了,然后把20分的代碼加上個預處理,拿了50分。

D 甜圈

  • 打了個50分n2暴力,結果數據水,拿了70分

  • 正解是將工作順序看成一字符串,寫個線段樹維護一下Hash值,然后區間加,區間乘。可是乘法標記和加法標記混一塊的實在是想不明白,若竹兄上課講的那種方法和我考場想的特別像,然后我就按若竹的提示想了出來。

  • 將T個工作拍到線段樹上,每個節點儲存做的工作區間,[0, 0]表示還沒有工作,[-1, -1]表示不合法,然后大力Pushdown一下就可以了,自己想出來可真是高興


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM