Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.68 KB | None | 0 0
  1. namespace CubicArtilery
  2. {
  3. using System;
  4. using System.Collections.Generic;
  5.  
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. var maxCapacity = int.Parse(Console.ReadLine());
  11. var bunkersOrder = new Queue<string>();
  12.  
  13. var bunkers = new Dictionary<string, Queue<int>>();
  14. var bunkersFullness = new Dictionary<string, int>();
  15.  
  16. var input = Console.ReadLine();
  17.  
  18. while (input != "Bunker Revision")
  19. {
  20. var bunkersInfo = input.Split();
  21. int weaponCapacity;
  22.  
  23. foreach (var element in bunkersInfo)
  24. {
  25. if (!int.TryParse(element,out weaponCapacity))
  26. {
  27. bunkers.Add(element, new Queue<int>());
  28. bunkersFullness.Add(element, 0);
  29. bunkersOrder.Enqueue(element);
  30. }
  31. else
  32. {
  33. var currentBunker = bunkersOrder.Peek();
  34.  
  35. if (maxCapacity - bunkersFullness[currentBunker] >= weaponCapacity)
  36. {
  37. bunkers[currentBunker].Enqueue(weaponCapacity);
  38. bunkersFullness[currentBunker] += weaponCapacity;
  39. }
  40. else
  41. {
  42. if (bunkersOrder.Count > 1)
  43. {
  44. PrintBunker(new KeyValuePair<string, Queue<int>>(currentBunker, bunkers[currentBunker]));
  45. bunkersOrder.Dequeue();
  46. bunkers.Remove(currentBunker);
  47. bunkersFullness.Remove(currentBunker);
  48.  
  49. foreach (var b in bunkersOrder)
  50. {
  51. if (maxCapacity - bunkersFullness[b] >= weaponCapacity)
  52. {
  53. bunkers[b].Enqueue(weaponCapacity);
  54. bunkersFullness[b] += weaponCapacity;
  55. }
  56. }
  57. }
  58. else
  59. {
  60. if (weaponCapacity <= maxCapacity)
  61. {
  62. TryFitInBunker(weaponCapacity, currentBunker, bunkers, bunkersFullness, maxCapacity);
  63. }
  64. }
  65. }
  66. }
  67. }
  68.  
  69. input = Console.ReadLine();
  70. }
  71. }
  72.  
  73. private static void TryFitInBunker(int weaponCapacity, string currentBunker, Dictionary<string, Queue<int>> bunkers, Dictionary<string,int> bunkersFullness, int maxCapacity)
  74. {
  75. while (bunkersFullness[currentBunker] + weaponCapacity > maxCapacity)
  76. {
  77. bunkersFullness[currentBunker] -= bunkers[currentBunker].Dequeue();
  78. }
  79. bunkers[currentBunker].Enqueue(weaponCapacity);
  80. bunkersFullness[currentBunker] += weaponCapacity;
  81. }
  82.  
  83. private static void PrintBunker(KeyValuePair<string, Queue<int>> bunker)
  84. {
  85. if (bunker.Value.Count == 0)
  86. {
  87. Console.WriteLine($"{bunker.Key} -> Empty");
  88. }
  89. else
  90. {
  91. Console.WriteLine($"{bunker.Key} -> {string.Join(", ",bunker.Value)}");
  92. }
  93. }
  94. }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement