# Greedy# Sorting# Array

k467 - 分班 (Class)

🔗 前往 ZeroJudge 原題

題目描述

題目給定一個包含 n 個學生的班級,以及 n 個學生的能力值。接著,題目會再給定 n 個學生的期望班級。目標是找出所有期望加入目前班級但能力值比班級學生低的學生,並將他們輸出。如果沒有任何學生符合條件,則輸出 -1。如果所有學生都期望加入目前班級,則輸出 -1。

解題思路

這題的解題思路是使用貪心演算法。首先,讀取班級學生的能力值。然後,迭代讀取每個學生的期望班級,並比較其能力值與目前班級學生的能力值。如果學生的能力值比班級學生低,則將其加入一個新的陣列中。最後,輸出新的陣列。如果新的陣列為空,則輸出 -1。如果新的陣列的長度等於 n,則輸出 -1。

複雜度分析

  • 時間複雜度: O(n)
  • 空間複雜度: O(n)

程式碼

#include <iostream>
using namespace std;
int n,a[1005],x,m;
int main(){
	cin >> n;
	for(int i=1;i<=n;++i){
		cin >> a[i];
	}
	for(int i=1;i<=n;++i){
		cin >> x;
		if(a[i]>x){
			cout << i << " ";
		}
		else{
			a[m++]=i;
		}
	}
	if(m==n)cout << "-1\n";
	else cout << "\n";
	for(int i=0;i<m;++i){
		cout << a[i] << " ";
	}
	if(m==0)cout << "-1";
}

Discussion