2024牛客多校6

Aderose_yr發表於2024-08-03

第五場太抽象了,失去補題慾望

6

A Cake (A)

首先假設字串已經確定,對Oscar而言,由於一份蛋糕可以為空,在兩人都儘可能取最大值的情況下,相當於忽略所有空的部分、只根據字串的某個字首 \(s'\) 劃分蛋糕,按照字串中0佔比最大的字首平均劃分一定是最優的。回到遊戲第一步,已知Oscar的目標,Grammy移動時應當讓最優 \(s'\) 中0佔比儘可能小,而Oscar應使之儘可能大,可用類似樹上dp的思路求解。

學習了xht賽時的dfs函式,比我那坨程式碼好多了······

double dfs(int f, int i, int it, int cnt1, int cnt2, double mx) {
    if(v[i].size() == 1 && v[i][0].t == f) return mx;
    double ans = it;
    for(int j = 0; j < v[i].size(); j++) {
        int t = v[i][j].t, k = v[i][j].k;
        if(t == f) continue;
        int x1 = cnt1 + (1 ^ k), x2 = cnt2 + 1;
        if(it) {
            ans = min(ans, dfs(i, t, it ^ 1, x1, x2, max(mx, x1 * 1.0 / x2)));
        } else {
            ans = max(ans, dfs(i, t, it ^ 1, x1, x2, max(mx, x1 * 1.0 / x2)));
        }
    }
    return max(ans, mx);
}

B.Cake 2 (B)

找規律題,似乎xcpc的簽到偏愛找規律()畫圖觀察每塊蛋糕的分佈位置可得,\(k \leq n/2\) 時,\(ans=n*k+1\),其中特判 \(k*2=n\)\(ans=n\)\(k > n / 2\) 時同理考慮 \(n-k\) 即可。

D.Puzzle: Wagiri (D)

(說起來Wagiri是什麼意思呢,好奇)

由無向邊的環結構想到邊雙連通分量,被保留的輪邊必須位於某個分量內部;再用類似縮點的思想,將每個邊雙連通分量當作一個點考慮,被保留的切邊恰好將所有點連成一棵樹。先對所有輪邊計算邊雙連通分量、再對所有切邊計算生成樹,最後並查集檢驗連通性即可。注意邊雙的程式碼比縮點多一個對邊的特判。

主要程式碼如下,將不合法邊的型別記作-1,便於輸出:

    for(int i = 1; i <= n; i++) {
        if(!dfn[i]) tarjan(i, 0);
    }
    for(int i = 1; i <= n; i++) {
        if(r[col[i]]) f[find(i)] = find(r[col[i]]);
        else r[col[i]] = i;
    }
    int cntm = 0;
    for(int i = 1; i <= m; i++) {
        int x = e[i].f, y = e[i].t;
        if(e[i].id) {
            if(find(x) != find(y)) {
                f[find(x)] = find(y);
                cntm++;
            } else {
                e[i].id = -1;
            }
        } else {
            if(col[x] != col[y]) {
                e[i].id = -1;
            } else cntm++;
        }
    }
    int cnt = 0;
    for(int i = 1; i <= n; i++) {
        if(f[i] == i) cnt++;
    }
    if(cnt > 1) {
        printf("NO");
        return 0;
    }
    printf("YES\n");
    printf("%d\n", cntm);
    for(int i = 1; i <= m; i++) {
        if(e[i].id >= 0) {
            printf("%d %d\n", e[i].f, e[i].t);
        }
    }

相關文章