static void Main(string[] args) { long capacityOfTheBag = long.Parse(Console.ReadLine()); string[] seif = Console.ReadLine().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); //var bag = new Dictionary<string, Dictionary<string, long>>(); Bag bag = new Bag(); //long gold = 0; //long gems = 0; //long cash = 0; for (int i = 0; i < seif.Length; i += 2) { string name = seif[i]; long amount = long.Parse(seif[i + 1]); string itemName = string.Empty; if (name.Length == 3) { itemName = "Cash"; } else if (name.ToLower().EndsWith("gem")) { itemName = "Gem"; } else if (name.ToLower() == "gold") { itemName = "Gold"; } if (itemName == "") { continue; } else if (capacityOfTheBag < bag.SumAllInBag() + amount) { continue; } switch (itemName) { case "Gem": if (capacityOfTheBag >= (bag.SumAllInBag() + amount)) { if (bag.SumGold() >= bag.SumAllGems() + amount) { bag.AddGems(name, amount); } } break; ////if (!bag.ContainsKey(itemName)) //if (!bag.CheckExistGems()) //{ // //if (bag.ContainsKey("Gold")) // if (bag.CheckExistGold()) // { // //if (broika > bag["Gold"].Values.Sum()) // if (amount > bag.SumGold()) // { // bag.CreateGems(name, amount); // //continue; // } // } //} //else if (bag.SumAllGems() + amount > bag.SumGold()) //{ // bag.AddGems(name, amount); // //continue; //} //break; case "Cash": if (capacityOfTheBag >= (bag.SumAllInBag() + amount)) { if (bag.SumAllGems() >= bag.SumAllCash() + amount) { bag.AddCash(name, amount); } } break; //if (!bag.CheckExistCash()) //{ // if (bag.CheckExistGems()) // { // if (amount > bag.SumAllGems()) // { // bag.CreateCash(name, amount); // //continue; // } // } // else // { // bag.AddCash(name, amount); // //continue; // } //} ////else if (bag[itemName].Values.Sum() + amount > bag["Gem"].Values.Sum()) //else if (bag.SumAllCash() + amount > bag.SumAllGems()) //{ // bag.AddCash(name,amount); // //continue; //} //break; case "Gold": if (capacityOfTheBag >= (bag.SumAllInBag() + amount)) { bag.AddGold(amount); } break; } //if (!bag.ContainsKey(itemName)) //{ // bag[itemName] = new Dictionary<string, long>(); //} //if (!bag[itemName].ContainsKey(name)) //{ // bag[itemName][name] = 0; //} //bag[itemName][name] += amount; //if (itemName == "Gold") //{ // gold += amount; //} //else if (itemName == "Gem") //{ // gems += amount; //} //else if (itemName == "Cash") //{ // cash += amount; //} } //var resultGold = bag.GetAllGold(); //var resultCash = bag.GetAllCash(); //var resultGems = bag.GetAllGems(); //resultGems = resultGems.OrderByDescending(x => x.Name).ToList(); //resultCash = resultCash.OrderByDescending(x => x.Name).ToList(); Console.WriteLine(bag); //Console.WriteLine(resultGold); //foreach (var currentGems in resultGems) //{ // Console.WriteLine($"{currentGems.Name} {currentGems.Quantity}"); //} //foreach (var currentCash in resultCash) //{ // Console.WriteLine($"{currentCash.Name} {currentCash.Quantity}"); //} //foreach (var x in bag) //{ // Console.WriteLine($"<{x.Key}> ${x.Value.Values.Sum()}"); // foreach (var item2 in x.Value.OrderByDescending(y => y.Key).ThenBy(y => y.Value)) // { // Console.WriteLine($"##{item2.Key} - {item2.Value}"); // } //} }