n 堆鵝卵石,第 i 堆有 aᵢ 顆。用 k 種顏色著色,要求任意兩堆同色石子數差 ≤ 1。判斷是否可行並輸出方案。
令 mx = max(aᵢ), mn = min(aᵢ)。可行當且僅當 mx - mn ≤ k。
對每堆,按順序用顏色 1..k 循環著色。因最大堆最多比最小堆多 k 顆,循環著色保證每色在各堆中出現次數差 ≤ 1。
#include <stdio.h>
int main() {
int n,k,a[105];
while(scanf("%d%d",&n,&k)==2) {
int mn=1e9, mx=0;
for(int i=0;i k) { puts("NO"); continue; }
puts("YES");
for(int i=0;i
複雜度
- 時間:O(Σaᵢ)
- 空間:O(n)