牛客春招刷题训练营-2025.4.11题解

活动地址: 牛客春招刷题训练营 - 编程打卡活动

简单题 记负均正

按题意计算。
注意数组中含有 和正数个数为 的情况。

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i++)cin >> a[i];
    long long sum = 0;
    int cnt = 0;
    int negacnt = 0;
    for (int i = 0; i < n; i++) {
        if (a[i] < 0)negacnt++;
        else if (a[i] > 0) {
            cnt++;
            sum += a[i];
        }
    }
    cout << negacnt << ' ';
    if (cnt == 0)cout << 0 << '\n';
    else cout << fixed << setprecision(11) << 1.0 * sum / cnt << '\n';
    return 0;
}

中等题 小数字

贪心。
时,开根号更优。
时,除以 更优。
否则减 更优。

#include <bits/stdc++.h>
using namespace std;
void solve() {
    int n, m;
    cin >> n >> m;
    while (n > 1 && m > 0) {
        if (n > 5)
            n = ceil(sqrt(n));
        else if (n > 2)
            n = (n + 1) / 2;
        else n = 1;
        m--;
    }
    n -= m;
    cout << n << '\n';
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t;
    cin >> t;
    while (t--)solve();
    return 0;
}

困难题 【模板】完全背包

动态规划。
只需在01背包基础上修改枚举顺序。

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n, V;
    cin >> n >> V;
    vector<int> dp(V + 1);
    vector<bool> vis(V + 1);
    vis[0] = 1;
    for (int i = 0; i < n; i++) {
        int v, w;
        cin >> v >> w;
        for (int i = v; i <= V; i++) {
            if (vis[i - v]) {
                dp[i] = max(dp[i], dp[i - v] + w);
                vis[i] = 1;
            }
        }
    }
    cout << *max_element(dp.begin(), dp.end()) << '\n';
    cout << dp[V] << '\n';
    return 0;
}
#牛客春招刷题训练营#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务