P4447 分組題解
阿新 • • 發佈:2021-07-21
#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; }