Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Linq;
- //=================================================
- //Грешка на последен тест за Memory Limit - 90/100
- //=================================================
- namespace _09.CrossFire
- {
- class Program
- {
- static void Main(string[] args)
- {
- int[] sizes = Console.ReadLine()
- .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
- .Select(int.Parse)
- .ToArray();
- int[][] matrix = FillMatrix(sizes);
- string command = Console.ReadLine();
- while (command != "Nuke it from orbit")
- {
- int[] data = command
- .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
- .Select(int.Parse)
- .ToArray();
- matrix = MakeAHit(data, matrix);
- command = Console.ReadLine();
- }
- PrintResult(matrix);
- }
- private static void PrintResult(int[][] matrix)
- {
- foreach (var row in matrix)
- {
- Console.WriteLine(string.Join(" ", row));
- }
- }
- private static int[][] FillMatrix(int[] sizes)
- {
- int[][] matrix = new int[sizes[0]][];
- int counter = 1;
- for (int row = 0; row < matrix.Length; row++)
- {
- matrix[row] = new int[sizes[1]];
- for (int col = 0; col < matrix[0].Length; col++)
- {
- matrix[row][col] = counter;
- counter++;
- }
- }
- return matrix;
- }
- private static int[][] MakeAHit(int[] data, int[][] matrix)
- {
- int hitRow = data[0];
- int hitCol = data[1];
- int radius = data[2];
- if (radius < 0)
- {
- return matrix;
- }
- for (int row = hitRow - radius; row <= hitRow + radius; row++)
- {
- if (IsInRange(matrix, row, hitCol))
- {
- matrix[row][hitCol] = 0;
- }
- }
- for (int col = hitCol - radius; col <= hitCol + radius; col++)
- {
- if (IsInRange(matrix,hitRow,col))
- {
- matrix[hitRow][col] = 0;
- }
- }
- for (int row = 0; row < matrix.Length; row++)
- {
- matrix[row] = matrix[row].Where(x => x > 0).ToArray();
- if (matrix[row].Length == 0)
- {
- matrix = matrix.Take(row).Concat(matrix.Skip(row + 1)).ToArray();
- row--;
- }
- }
- return matrix;
- }
- private static bool IsInRange(int[][] matrix, int row, int col)
- {
- return row >= 0 && row < matrix.Length && col >= 0 && col < matrix[row].Length;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement