```ts
export function splitCents(total: number, weights: number[]): number[] {
  if (!Number.isInteger(total) || total < 0) {
    throw new Error("Invalid total");
  }
  if (!Array.isArray(weights) || weights.length === 0) {
    throw new Error("Invalid weights list");
  }
  const sumWeights = weights.reduce((acc, weight) => acc + weight, 0);
  if (sumWeights <= 0) {
    throw new Error("Invalid weights list");
  }

  const initialParts = weights.map(weight => Math.floor((total * weight) / sumWeights));
  let remainder = total - initialParts.reduce((acc, part) => acc + part, 0);

  const fractions = weights.map(weight => (weight * total) % sumWeights);
  const indicesSortedByFractionDesc = fractions
    .map((fraction, index) => ({ fraction, index }))
    .sort((a, b) => b.fraction - a.fraction)
    .map(item => item.index);

  for (let i = 0; remainder > 0; i++) {
    initialParts[indicesSortedByFractionDesc[i]]++;
    remainder--;
  }

  return initialParts;
}
```