学校里有 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;
}
不知道为什么测第一组的时候崩溃了...运行窗口崩了...求助
我寻思着没问题啊