Advertisement
Guest User

Untitled

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