using System.Collections.Generic;
public static int GetMaxAreaOfPieceOfCake(int h, int w, int[] hcuts, int[] vcuts)
var ihcuts = new List<int> {0, h};
ihcuts.InsertRange(1, hcuts);
var ivcuts = new List<int> {0, w};
ivcuts.InsertRange(1, vcuts);
Console.WriteLine($"ihcuts={string.Join(',', ihcuts)}, ivcuts={string.Join(',', ivcuts)}");
ihcuts.Aggregate((prev, curr) => {
maxh = Math.Max(maxh, curr - prev);
ivcuts.Aggregate((prev, curr) => {
maxw = Math.Max(maxw, curr - prev);
Console.WriteLine($"max height: {maxh}, max width: {maxw}");
public static void Main()
int[] hcuts = new int[] {1, 2, 4}, vcuts = new int[] {1, 3};
Console.WriteLine($"input: h={h}, w={w}, hcuts={string.Join(',', hcuts)}, vcuts={string.Join(',', vcuts)}");
Console.WriteLine($"max area: {GetMaxAreaOfPieceOfCake(h, w, hcuts, vcuts)}");
hcuts = new int[] {3, 1}; vcuts = new int[] {1};
Console.WriteLine($"input: h={h}, w={w}, hcuts={string.Join(',', hcuts)}, vcuts={string.Join(',', vcuts)}");
Console.WriteLine($"max area: {GetMaxAreaOfPieceOfCake(h, w, hcuts, vcuts)}");