public int next_available_time;
public Dispencer(int _litters_left, string _name, int _next_available_time)
litters_left = _litters_left;
next_available_time = _next_available_time;
public bool CanServerCar(int car_litters){
return (next_available_time == 0 && car_litters <= litters_left);
public static int solution1(int[] A, int X, int Y, int Z){
int total_time = X + Y + Z;
Dispencer x = new Dispencer(X, "X", 0);
Dispencer y = new Dispencer(Y, "Y", 0);
Dispencer z = new Dispencer(Z, "Z", 0);
while(sec_passed < total_time && car_idx < A.Length){
if (x.next_available_time == sec_passed){
x.next_available_time = 0;
if (y.next_available_time == sec_passed){
y.next_available_time = 0;
if (z.next_available_time == sec_passed){
z.next_available_time = 0;
if (x.CanServerCar(A[car_idx])){
x.next_available_time = sec_passed + A[car_idx];
x.litters_left -= A[car_idx];
if (y.CanServerCar(A[car_idx])){
y.next_available_time = sec_passed + A[car_idx];
y.litters_left -= A[car_idx];
if (z.CanServerCar(A[car_idx])){
z.next_available_time = sec_passed + A[car_idx];
z.litters_left -= A[car_idx];
return sec_passed - A[A.Length-1];
static void Main(string[] args)
Console.WriteLine("Hello World!");
Console.WriteLine(solution1(new int[] { 2, 8, 4, 3, 2 }, 7, 11, 3));
public static int[] solution(int[] A, int K)
int[] result = new int[N];
for(int i = 0; i < N; i++)
int new_idx = (i + K) % N;