```python
def split_cents(total: int, weights: list) -> list:
    if not isinstance(total, int) or isinstance(total, bool): raise ValueError("total must be whole cents")
    if total < 0: raise ValueError("total may not be negative")
    if not isinstance(weights, list) or not weights: raise ValueError("weights must be a non-empty list")
    if not all(isinstance(w, int) and not isinstance(w, bool) and w > 0 for w in weights): raise ValueError("a weight is a positive whole number")
    
    whole = sum(weights)
    parts = [total * w // whole for w in weights]
    leftover_cents = total - sum(parts)
    
    # Find the indices of partners with the largest discarded fractions
    largest_discarded_indices = []
    max_fraction = 0.0
    
    for i, w in enumerate(weights):
        fraction = (total - parts[i]) / w
        if fraction > max_fraction:
            max_fraction = fraction
            largest_discarded_indices = [i]
        elif fraction == max_fraction:
            largest_discarded_indices.append(i)
    
    # Distribute the leftover cents to the partners with the largest discarded fractions
    while leftover_cents > 0 and largest_discarded_indices:
        parts[largest_discarded_indices.pop(0)] += 1
        leftover_cents -= 1
    
    return parts
```