欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 2024年第十五届蓝桥杯CC++大学A组--成绩统计

2024年第十五届蓝桥杯CC++大学A组--成绩统计

2025/4/13 0:12:28 来源:https://blog.csdn.net/b19839356939/article/details/147100364  浏览:    关键词:2024年第十五届蓝桥杯CC++大学A组--成绩统计

2024年第十五届蓝桥杯C&C++大学A组--成绩统计

题目:

动态规划,

对于该题,考虑动态规划解法,先取前k个人的成绩计算其方差,并将成绩记录在数组中,记录当前均值,设小蓝已检查前i-1个人的成绩,若方差依然大于T,找出离均值最远的一个成绩,若第i个人的成绩距离当前均值更近,则剔除离均值较远的成绩,使得方差变小,若遍历完整个数组均找不到更小的方差,返回-1。

代码:

#include<bits/stdc++.h>
using namespace std;
int n, k, T;
vector<int> nums;
vector<int> team;bool is0()
{double mean,val;double sum = 0;for (auto num : team){sum += num;}mean = sum / k;val = 0;for (auto num : team){val += (num - mean) * (num - mean);}val /= k;if (val < T) return true;else return false;
}int main()
{cin >> n >> k >> T;int N = n;while (N--){double temp;cin >> temp;nums.push_back(temp);}if (n < k){cout << -1;return 0;}double sum = 0;for (int i = 0;i < k; i++){team.push_back(nums[i]);sum += nums[i];}double mean = sum / k;if (is0()){cout << k;return 0;}for (int i = k; i < nums.size(); ++i){double sub = 0;int x = -1;for (int j = 0; j < team.size(); ++j){if (abs(team[j] - mean) > sub)//找出距离平均值最远的值和下标{sub = abs(team[j] - mean);x = j;}}if (x != -1 && sub > abs(nums[i] - mean))team[x] = nums[i];if (is0()){cout << i + 1;return 0;}return -1;}return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词