Advertisement
Guest User

EmergencyRepairs

a guest
Jan 17th, 2016
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.98 KB | None | 0 0
  1. namespace _5.EmergencyRepairs
  2. {
  3.     using System;
  4.  
  5.     public class EmergencyRepairs
  6.     {
  7.         public static void Main()
  8.         {
  9.             ulong wall = ulong.Parse(Console.ReadLine());
  10.             int emergencyKits = int.Parse(Console.ReadLine());
  11.             int attacks = int.Parse(Console.ReadLine());
  12.  
  13.             for (int i = 0; i < attacks; i++)
  14.             {
  15.                 int attackPos = int.Parse(Console.ReadLine());
  16.                 int mask = ~(1 << attackPos);
  17.                 wall &= (ulong)mask;
  18.             }
  19.  
  20.             for (int pos = 0; pos < 63 && emergencyKits != 0; pos++)
  21.             {
  22.                 int firstPos = pos;
  23.                 int secondPos = firstPos + 1;
  24.                 int bitAtFirstPos = (int)(wall >> firstPos) & 1;
  25.                 int bitAtSecondPos = (int)(wall >> secondPos) & 1;
  26.                 if (bitAtFirstPos == 0 && bitAtSecondPos == 0)
  27.                 {
  28.                     wall |= (ulong)1 << firstPos;
  29.                     emergencyKits--;
  30.                     if (emergencyKits == 0)
  31.                     {
  32.                         break;
  33.                     }
  34.  
  35.                     wall |= (ulong)1 << secondPos;
  36.                     emergencyKits--;
  37.                     if (emergencyKits == 0)
  38.                     {
  39.                         break;
  40.                     }
  41.  
  42.                     int nextPos = secondPos + 1;
  43.                     int bitAtNextPos = (int)(wall >> nextPos) & 1;
  44.                     while (nextPos <= 63 && bitAtNextPos == 0)
  45.                     {
  46.                         wall |= (ulong)1 << nextPos;
  47.                         nextPos++;
  48.                         emergencyKits--;
  49.                         if (emergencyKits == 0)
  50.                         {
  51.                             break;
  52.                         }
  53.  
  54.                         bitAtNextPos = (int)(wall >> nextPos) & 1;
  55.                     }
  56.                 }
  57.             }
  58.             Console.WriteLine(wall);
  59.         }
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement