• 板块学术版
  • 楼主suximeng
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/12/16 13:23
  • 上次更新2024/12/16 19:33:27
查看原帖
1067444
suximeng楼主2024/12/16 13:23

题目

学生分组

【问题描述】

学校里有 n 个学生,其中 n 一定是偶数。每个学生有一定的编程能力,第 i 个学生的能力是ai。 学校里的老师希望把学生组成 2/1 个队伍,每个队伍里面有 2 个学生,每个学生只能属于一个队 伍。两个学生可以组队,当且仅当他们的能力是相同的,否则他们就不能理解对方。 由于开始的时候,学生的能力参差不齐,可能无法顺利组队。但是学生可以通过做题来提高自己 的能力,每做一题,能力就可以提高 1。 学校的老师希望计算出这些学生最少需要做多少题,才能顺利的组队。

【输入数据】

输入的第一行是一个正整数 n,表示学生的数量,保证 n 一定是偶数。 接下来一行有 n 个正整数,第 i 个整数ai表示第 i 个学生当前的编程能力。 【输出数据】 输出只有一行一个整数,表示所有学生最少需要做的总题数,才能使得顺利组队。

【输入样例 1】 65 10 2 3 14 5 【输出样例 1】 5

【输入样例 2】 2 1 100 【输出样例 2】 99

【样例说明】

在第一个样例中,第 3 个人和第 4 个人组队,第 1 个人和第 6 个人组队,第 2 个人和第 5 个人组 队,然后第 3 个人做 1 题,第 2 个人做 4 题,总共做 5 题,他们就能顺利组队了。 在第二个样例中,由于只有 2 个人,所以组队方案只有 1 种,第 1 个人需要做 99 题才能组队。

【数据范围】

对于 50%的数据,1 ≤ n ≤ 1000,所有学生的能力最多只有 2 种不同的取值。 对于 100%的数据,1 ≤ n ≤ 100000,1 ≤ ai ≤ 100。


直接崩溃的代码 c++

#include<bits/stdc++.h>
using namespace std;
int ina;
int main()
{	
	cin>>ina;
	int inb[ina];
	inb[0]=-1;
	for(int i=1;i<=ina;i++)
	{
		cin>>inb[i];
	}
	//in stop
	//
	int cha[ina][ina],small[ina],x[ina],y[ina];
	for(int i=0;i<=0;i++)
	{
		small[i]=-1;
	}
	for(int i=1;i<=ina;i++)
	{
		for(int o=1;o<=ina;o++){
			if(i==o) 
				cha[i][o]=-1;//自己不能和自己组队
			else
			{
				if(inb[i]<inb[o])
				    cha[i][o]=inb[o]-inb[i];
				else
					cha[i][o]=inb[i]-inb[o];
				if(small[i]==-1)
				small[i]=cha[i][o];
	            if(small[i]>=cha[i][o] && cha[i][o]!=-1)
				{
				x[i]=i;
				y[i]=o;
				small[i]=cha[i][o];
				}
			}
		}
	}
	//out small[*]
	//
	int ans=0,xx,yy;
	for(int i=1;i<=ina;i++)
	{
		for(int o=1;o<=ina;o++)
		{
			if(small[i]!=-1)
			{
			    ans=ans+small[i];
				xx=x[i];
				yy=y[i];
				small[xx]=small[yy]=-1;
			}
		}
	}
	cout<<ans;
	return 0;
}

不知道为什么测第一组的时候崩溃了...运行窗口崩了...求助 我寻思着没问题啊

2024/12/16 13:23
加载中...