Задача Lover of 3


1

Здравейте,

Опитах да реша тази задача, но след много мислене изкарах само 2 / 100. (Ето това ми е кода.) Може би подхода ми е напълно грешен. Може ли да споделите някои правилни решения.

Благодаря




Отговори



0
Вчера тази задача я написах за по-малко от 40 минути и изкара и 2 точки. Последваха няколко часа дебъг. При мен проблема беше, че когато излизам от границите на матрицата и вече съм променил текущите ред и колона, при следващата итерация на цикъла индексите бяха извън тези граници. В крайна сметка след дълго помпене на F10 я подкарах. Ето моето решение.

от milislavski (886 точки)


2

Може да погледнеш и моето решение : )

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _20.LoverOfThree_3_ { class ThreeLover { static void Main() { //GetMatrix var matrixDimensions = Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); var matrix = new int[matrixDimensions[0], matrixDimensions[1]]; //FillMatrix int firstRowNumber = (matrix.GetLength(0) - 1) * 3; int temp = firstRowNumber; for (int row = 0; row < matrix.GetLength(0); row++) { temp = firstRowNumber; for (int col = 0; col < matrix.GetLength(1); col++) { matrix[row, col] = temp; temp += 3; } firstRowNumber -= 3; } //Core logic and commands int commandsNum = int.Parse(Console.ReadLine()); long totalValue = 0; int rowIndex = matrixDimensions[0] - 1; int colIndex = 0; for (int i = 0; i < commandsNum; i++) { var commands = Console.ReadLine().Split(' ').ToArray(); var direction = commands[0]; var moves = int.Parse(commands[1]); // startIndex = matrix[matrixDimensions[0] - 1, 0]; for (int j = 0; j < moves - 1; j++) { totalValue += matrix[rowIndex, colIndex]; matrix[rowIndex, colIndex] = 0; if ((direction == "RU" || direction == "UR") && rowIndex > 0 && colIndex < matrix.GetLength(1) - 1) { rowIndex--; colIndex++; } else if ((direction == "LU" || direction == "UL") && rowIndex > 0 && colIndex > 0) { rowIndex--; colIndex--; } else if ((direction == "DL" || direction == "LD") && rowIndex < matrix.GetLength(0) - 1 && colIndex > 0) { rowIndex++; colIndex--; } else if ((direction == "DR" || direction == "RD") && rowIndex < matrix.GetLength(0) - 1 && colIndex < matrix.GetLength(1) - 1) { rowIndex++; colIndex++; } totalValue += matrix[rowIndex, colIndex]; matrix[rowIndex, colIndex] = 0; } } //Output Console.WriteLine(totalValue); } } }


от Joro97 (110 точки)