```typescript
export function splitCents(total: number, weights: number[]): number[] {
  if (typeof total !== 'number' || !Number.isInteger(total) || total < 0) {
    throw new Error("Total must be a non-negative integer.");
  }
  
  if (!Array.isArray(weights)) {
    throw new Error("Weights must be an array of numbers.");
  }

  if (weights.length === 0) {
    throw new Error("Weights list cannot be empty.");
  }

  const sumOfWeights = weights.reduce((acc, weight) => {
    if (typeof weight !== 'number' || !Number.isInteger(weight) || weight <= 0) {
      throw new Error("Each weight must be a positive integer.");
    }
    return acc + weight;
  }, 0);

  if (total % sumOfWeights !== 0) {
    throw new Error("Total must be divisible by the sum of weights.");
  }

  const allocations = weights.map(weight => Math.floor(total * weight / sumOfWeights));
  
  let remainder = total - allocations.reduce((acc, allocation) => acc + allocation, 0);

  // Distribute the remainder from largest to smallest discarded fraction
  for (let i = allocations.length - 1; i >= 0 && remainder > 0; i--) {
    if (allocations[i] % 1 !== 0) {
      const fractionalPart = allocations[i] % 1;
      allocations[i] -= fractionalPart;
      remainder--;
    }
  }

  return allocations;
}
```