i791 - pA. 沒有人受傷的世界完成了
題目描述
題目給定 N 個禮物,每個禮物都有一個類別 C<sub>i</sub>。有 K 個好友,目標是將每種類別的禮物盡可能平均分配給 K 個好友,且分配數量必須是 K 的整數倍。要求計算在不傷害任何人的情況下,每人最多可以分到幾個禮物。
解題思路
這題的解題思路是統計每種類別禮物的數量,然後對於每種類別,計算可以分配給 K 個好友的禮物數量(取 數量 / K 的整數部分)。最後將所有類別可以分配的禮物數量加總,即為每人最多可以分到的禮物數量。這是一個貪心算法,因為我們盡可能地分配每種類別的禮物。
複雜度分析
- 時間複雜度: O(N + M),其中 N 是禮物數量,M 是禮物類別的範圍 (在本題中 M = 101)。主要時間花在統計每種類別禮物數量和計算分配數量上。
- 空間複雜度: O(M),其中 M 是禮物類別的範圍。主要空間花在儲存每種類別禮物數量的陣列
ct上。
程式碼
#include <iostream>
using namespace std;
int n,k,c,ct[105],ans;
int main(){
cin.tie(0); ios::sync_with_stdio(false);
cin >> n >> k;
for(int i=0;i<n;++i){
cin >> c;
++ct[c];
}
for(int i=0;i<=100;++i)
ans+=ct[i]/k;
cout << ans;
}