牛客春招刷题训练营-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;
}
#牛客春招刷题训练营#