```python
def parse_amount(text: str) -> int:
    """Converts a decimal amount string into integer cents."""
    if isinstance(text, str):
        parts = text.split('.')
        if len(parts) == 2 and parts[1] == '00':
            return int(parts[0])
        elif len(parts) == 3 and len(parts[1]) == 2 and parts[2] == '00' and parts[0].isdigit() and parts[1][0].isdigit() and parts[1][1].isdigit():
            return int(parts[0]) * 100 + int(parts[1])
        else:
            raise ValueError("Invalid amount format.")
    else:
        raise ValueError("Input must be a string.")

def format_amount(cents: int) -> str:
    """Converts integer cents back into the dotted form."""
    if isinstance(cents, int):
        return f"{cents // 100}.{cents % 100:02d}"
    else:
        raise ValueError("Input must be an integer.")

def allocate_cents(total_cents: int, weights: list) -> list:
    """Allocates total_cents across a list of integer weights proportionally."""
    if not isinstance(weights, list):
        raise ValueError("Weights must be a list.")
    
    total_weights = sum(weights)
    if total_weights == 0 or total_cents < 0 or any(weight < 0 for weight in weights) or len(weights) == 0:
        raise ValueError("Invalid weights or total cents.")
    
    shares = [total_cents // total_weights] * len(weights)
    remainder = total_cents % total_weights
    
    for i in range(remainder):
        shares[i] += 1
    
    return shares
```