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

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

题目:

动态规划,

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

代码:

cpp 复制代码
#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;
}
相关推荐
Wang's Blog几秒前
Java 项目部署之 Docker工具快速入门: Docker 是什么以及它如何解决部署环境问题
java·开发语言·docker
老木避暑研究所5 分钟前
从原始数据到洞察:一次完整的避暑房环境数据采集、清洗与可视化分析
java·开发语言
程序喵大人20 分钟前
【C++入门】编译链接模型 - 05 ODR 为什么会让重复定义变成工程炸点
开发语言·c++·编译链接·odr
weixin1997010801628 分钟前
《淘宝TOP API:落地方案、接口边界与业务踩坑 —— 聚石塔内外价差 10 倍的真相》(附 Python 源码)
开发语言·python
前端 贾公子30 分钟前
LangGraph == 图的状态(State)管理 (上)
java·开发语言·数据库
汉克老师1 小时前
CSP-S 2026 初赛试题解析(第一部分:选择题(8-15))精讲
c++·csp-s·小学生·学c++编程
_wyt0011 小时前
洛谷 P10112 [GESP202312 八级] 奖品分配 题解
c++·数学·gesp·八级
xuxigifxfh1 小时前
牛客:HJ170 01序列
java·开发语言·算法·华为机考
朝朝辞暮i1 小时前
C++ 第 33 课:事件循环——spin() 到底在干什么
开发语言·c++·算法
野生技术架构师2 小时前
牛客网互联网大厂 Java 高频面试题整理(持续更新)
java·开发语言