```python
def split_cents(total: int, weights: list) -> list:
    if total < 0:
        raise ValueError("Total must be non-negative")
    if not isinstance(weights, list):
        raise ValueError("Weights must be a list")
    if not weights or any(w <= 0 for w in weights):
        raise ValueError("Weights list must contain only positive whole numbers")

    sum_weights = sum(weights)
    base_share = total // sum_weights
    fractional_parts = [(total * w) % sum_weights for w in weights]
    
    parts = [base_share + (1 if frac > 0 else 0) for frac in fractional_parts]
    remainder = sum(parts) - total

    while remainder > 0:
        max_fraction_index = fractional_parts.index(max(fractional_parts))
        parts[max_fraction_index] -= 1
        fractional_parts[max_fraction_index] -= (sum_weights // len(weights))
        remainder += 1

    return parts
```