using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Collections;
public
class
GFG
{
public
static
int
mergeStones(List<
int
> list,
int
k)
{
list.Sort();
var
cost = 0;
while
(list.Count > k)
{
var
sum = 0;
for
(
int
i = 0; i < k; i++)
{
sum += list[i];
}
for
(
int
t = 0; t < k; t++){
list.RemoveAt(0);
}
GFG.insertInSortedList(list, sum);
cost += sum;
}
if
(list.Count == k)
{
cost += list.AsQueryable().Sum();
return
cost;
}
else
{
return
-1;
}
}
public
static
void
insertInSortedList(List<
int
> sortedList,
int
item)
{
var
len = sortedList.Count;
GFG.insertInSortedList(sortedList, item, 0, len - 1);
}
public
static
void
insertInSortedList(List<
int
> sortedList,
int
item,
int
start,
int
end)
{
var
mid = (
int
)((end - start) / 2.0);
if
(mid == 0 || (mid == sortedList.Count - 1) || sortedList[mid] == item)
{
sortedList.Insert(mid,item);
return
;
}
else
if
(sortedList[mid] < item)
{
GFG.insertInSortedList(sortedList, item, mid + 1, end);
}
else
{
GFG.insertInSortedList(sortedList, item, start, mid - 1);
}
}
public
static
void
Main(String[] args)
{
var
stones =
new
List<
int
>();
stones.Add(3);
stones.Add(2);
stones.Add(4);
stones.Add(1);
Console.WriteLine(GFG.mergeStones(stones, 3));
Console.WriteLine(GFG.mergeStones(stones, 2));
}
}