```python
def parse_amount(text: str) -> int:
    """Turns a decimal amount string into integer cents."""
    if not isinstance(text, str):
        raise ValueError("Input must be a string")
    parts = text.split('.')
    if len(parts) > 2:
        raise ValueError("Invalid format")
    integer_part = parts[0]
    fraction_part = '00' if len(parts) == 1 else parts[1].ljust(2, '0')
    if not integer_part.isdigit() or not fraction_part.isdigit():
        raise ValueError("Non-numeric characters found")
    return int(integer_part) * 100 + int(fraction_part)


def format_amount(cents: int) -> str:
    """Renders non-negative integer cents back into a dotted form."""
    if not isinstance(cents, int) or cents < 0:
        raise ValueError("Input must be a non-negative integer")
    return f"{cents // 100}.{cents % 100:02d}"


def allocate_cents(total_cents: int, weights: list) -> list:
    """Splits total_cents across a list of integer weights proportionally."""
    if not isinstance(weights, list) or not all(isinstance(w, int) and w >= 0 for w in weights):
        raise ValueError("Weights must be a non-empty list of non-negative integers")
    if sum(weights) == 0:
        raise ValueError("Sum of weights cannot be zero")
    if not isinstance(total_cents, int) or total_cents < 0:
        raise ValueError("Total cents must be a non-negative integer")

    if len(weights) == 1:
        return [total_cents]

    shares = [0] * len(weights)
    exact_values = [total_cents * weight // sum(weights) for weight in weights]
    remainder = total_cents - sum(exact_values)

    for i in range(remainder):
        max_remainder_index = max(range(len(weights)), key=lambda j: (weights[j], -j))
        shares[max_remainder_index] += 1

    return shares
```