2026牛客寒假算法基础集训营5

2026/02/16

B.智乃的瓷砖

void solve() {
    int n, m;
    cin >> n >> m;
    vector<vector<char>> a(n + 3, vector<char>(m + 3));
    auto draw = [&](int x, int y) -> void {
        a[x][y] = '/';
        a[x][y + 1] = '\\';
        a[x + 1][y] = '\\';
        a[x + 1][y + 1] = '/';
    };
    for (int i = 1; i <= n; i += 2)
        for (int j = 1; j <= m; j += 2) {
            draw(i, j);
        }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++)
            cout << a[i][j];
        cout << endl;
    }
}

E.智乃的最大子段和取模

void solve() {
    int n, p;
    cin >> n >> p;
    vector<ll> a(n + 1), s(n + 1);
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        s[i] = (s[i - 1] + a[i]) % p;
    }
    // cout << endl;
    set<pll> st;
    st.insert({0, 0});
    int ans = -1;
    int l, r;
    for (int i = 1; i <= n; i++) {
        auto [val, pos] = *st.begin();
        ll res = (s[i] - val + p) % p;
        if (res > ans) {
            ans = res, l = pos + 1, r = i;
        }
        auto it = st.upper_bound({s[i], 0});
        if (it != st.end()) {
            auto [val1, pos1] = *st.upper_bound({s[i], 0});
            res = (s[i] - val1 + p) % p;
            if (res > ans) {
                ans = res, l = pos1 + 1, r = i;
            }
        }
        st.insert({s[i], i});
    }
    cout << l - 1 << " " << r - 1 << " " << ans << endl;
}

F.智乃的算法竞赛群友

void solve() {
    ll n, a, b;
    cin >> n >> a >> b;
    auto cal = [&](ll x) -> ll {
        int t = min(n - 7 * x, x);
        t += (n - 7 * x - t) / 2;
        return x * a + t * b;
    };
    int l = 0, r = n / 7;
    while (l + 5 < r) {
        int lmid = l + (r - l) / 3;
        int rmid = r - (r - l) / 3;
        if (cal(lmid) <= cal(rmid))
            l = lmid + 1;
        else
            r = rmid - 1;
    }
    ll ans = 0;
    for (int i = l; i <= r; i++) {
        ans = max(ans, cal(i));
    }
    cout << ans << endl;
}