Bootstrap

1.11 蓝桥入门赛题解

以后变成入门赛和月赛了,每月痛失一次上分机会

第 25 场 蓝桥入门赛 - 蓝桥云课

1. 略

2. 酒店安排

排序后贪心计算

void solve() {
    int n, m;
    cin >> n >> m;
    vector<int> a(n);
    for (int i = 0; i < n; i++) cin >> a[i];
    sort(a.begin(), a.end());
    int ans = 1e9;
    for (int i = m-1; i < n; i++) {
        ans = min(ans, a[i] - a[i-m+1]);
    }
    cout << ans << '\n';
}

3. 男女搭配

贪心思想,考虑不派去参加特训可以组t个,先判断多出来的是否大于等于k,否则无脑(n+m-k)/3

void solve() {
    int n, m, k;
    cin >> n >> m >> k;
    int t = min(n / 2, m);
    if (n + m - t * 3 >= k) cout << t << '\n';
    else cout << (n + m - k) / 3 << '\n';
}

4. 排列高手

显然,1 在一端 2 在另一端此时为最优排列,结果为

1\times \frac{n(n-1)}{2} + 2 \times (n-1) + (n + 1) \times 1

void solve() {
    int n;
    cin >> n;
    // 1 在一端 2 在另一端
    cout << (1LL * n * n + 5 * n - 2) / 2 << '\n'; 
}

5. 混乱的草稿纸

从大往小判断,如果后面的都没有动过并且满足顺序,则当前也不用动

void solve() {
    int n, x;
    cin >> n;
    vector<int> idx(n+1);
    for (int i = 1; i <= n; i++) {
        cin >> x;
        idx[x] = i;
    }
    int ans = 0, f = 0;
    for (int i = n-1; i; i--) {
        if (idx[i] < idx[i+1] && !f) continue;
        else ans++, f = 1;
    }
    cout << ans << '\n';
}

6. 完美数对

void solve() {
    int n, x;
    cin >> n;
    unordered_map<int, int> mp;
    for (int i = 0; i < n; i++) {
        cin >> x;
        mp[x]++;
    }

    vector<pair<int, int>> v1, v2;
    for (auto p : mp) {
        v1.push_back({p.first, p.second});
        v2.push_back({p.second, p.first});
    }
    int m = v1.size();
    sort(v1.begin(), v1.end(), greater<pair<int, int>>());
    sort(v2.begin(), v2.end(), greater<pair<int, int>>());
    ll ans = 0;

    vector<int> bit(n+1);
    auto add = [&](int i, int x) {
        for (; i <= n; i += i & -i) bit[i] += x;
    };
    auto sum = [&](int i) {
        int res = 0;
        for (; i; i -= i & -i) res += bit[i];
        return res;
    };

    for (int i = 0, j = 0; i < m; i++) {
        while (j < m && v2[j].first >= v1[i].first) {
            add(v2[j].second, 1);
            j++;
        }
        ans += sum(v1[i].second);
    }
    cout << ans << '\n';
}

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。