You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
#include <bits/stdc++.h>
|
|
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
const int N = 100010;
|
|
|
|
|
int a[N]; //存储人员能力值
|
|
|
|
|
bool b[N]; //桶,用来记录是否使用过
|
|
|
|
|
int MIN = 0x3f3f3f3f;//组中最少人数值
|
|
|
|
|
int n;
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
|
cin >> n;
|
|
|
|
|
//输入实力值并排序
|
|
|
|
|
for (int i = 1; i <= n; i++) cin >> a[i];
|
|
|
|
|
sort(a + 1, a + n + 1);//贪心算法,都是排序,从小到大
|
|
|
|
|
|
|
|
|
|
//遍历每个学生
|
|
|
|
|
for (int i = 1; i <= n; i++) {
|
|
|
|
|
if (!b[i]) { //此学生没有加入到组中
|
|
|
|
|
b[i] = true; //准备把他加入到某个组中
|
|
|
|
|
|
|
|
|
|
int c = a[i];
|
|
|
|
|
//对于当前学生的后面每个学生
|
|
|
|
|
for (int j = i + 1; j <= n + 1; j++) { //只有n+1这么写,最后一个才能加进来,执行这个循环
|
|
|
|
|
if (!b[j]) { //如果此人没有加入到组中
|
|
|
|
|
if (a[j] - c != 1 && a[j] != c) { //与前一个差不是1,而且与前端的也不一样,这时,表示前面的分组就已经结束了,需要画句号了
|
|
|
|
|
MIN = min(MIN, j - i); //完成本次分组,看看长度是多少
|
|
|
|
|
break; //本次结束
|
|
|
|
|
} else if (a[j] - c == 1) {
|
|
|
|
|
c = a[j]; //持续本次分组中
|
|
|
|
|
b[j] = true; //标识
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//输出大吉
|
|
|
|
|
cout << MIN << endl;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|