Ошибка в тесте - C#

Узнай цену своей работы

Формулировка задачи:

При вводе этого теста: 1 10 1 1 1 1 1 1 1 1 1 1 Выводит: 10 А нужно: 10 R R R R R R R R R Как исправить? Вот код:
 StreamReader r = new StreamReader("input.txt");
            StreamWriter w = new StreamWriter("output.txt");
            string[] num = r.ReadLine().Split();
            int N = int.Parse(num[0]);
            int M = int.Parse(num[1]);
            int[,] arr = new int[N, M];
            for (int i = 0; i < N; i++)
            {
                string[] line2 = r.ReadLine().Split();
                for (int j = 0; j < M; j++)
                {
                    arr[i, j] = int.Parse(line2[j]);
                }
            }
            const int RIGHT = 1, DOWN = 2;
            int height = N;
            int width = M;
 
            var row = new int[width];
            var rowDirs = new List<int>[width];
 
            var column = new int[height];
            var columnDirs = new List<int>[height];
 
            row[0] = arr[0, 0];
            rowDirs[0] = new List<int>();
            for (var x = 1; x < width; x++)
            {
                row[x] = row[x - 1] + arr[0, x];
                rowDirs[x] = new List<int>(rowDirs[x - 1]) { RIGHT };
            }
 
            column[0] = arr[0, 0];
            columnDirs[0] = new List<int>();
            for (var y = 1; y < height; y++)
            {
                column[y] = column[y - 1] + arr[y, 0];
                columnDirs[y] = new List<int>(columnDirs[y - 1]) { DOWN };
            }
 
            for (var x = 1; x < width; x++)
            {
                column[0] = row[x];
                for (var y = 1; y < height; y++)
                {
                    if (column[y] <= column[y - 1])
                    {
                        column[y] = column[y] + arr[y, x];
                        columnDirs[y].Add(RIGHT);
                    }
                    else
                    {
                        column[y] = column[y - 1] + arr[y, x];
                        if (y == 1)
                        {
                            columnDirs[0] = rowDirs[x];
                            columnDirs[1] = new List<int>(rowDirs[x]);
                        }
                        columnDirs[y] = new List<int>(columnDirs[y - 1]) { DOWN };
                    }
                }
            }
 
            List<int> resultDir = columnDirs[height - 1];
            var path = new char[resultDir.Count];
            for (var i = 0; i < path.Length; i++)
            {
                path[i] = resultDir[i] == RIGHT ? 'R' : 'D';
            }
 
            w.WriteLine(column[height - 1]);
            w.WriteLine(string.Join(" ", path));
            w.Close();
Со всеми остальными тестами работает нормально, но с этим беда.

Решение задачи: «Ошибка в тесте»

textual
Листинг программы
    internal class Program
    {
        static void Main(string[] args)
        {
            var matrix = InputMatrix();
            var minWayMatrix = GetMinWayMatrix(matrix);
            var way = GetWay(minWayMatrix);
            OutputWay(way, minWayMatrix);
        }
 
        private static void OutputWay(string way, int[,] minWayMatrix)
        {
            int width = minWayMatrix.GetLength(1);
            int height = minWayMatrix.GetLength(0);
            Console.WriteLine(minWayMatrix[height - 1, width - 1]);
            Console.WriteLine(way);
        }
 
        private static int[,] InputMatrix()
        {
            var numbers = Regex.Split(Console.ReadLine(), @"\s+")
                .Where(w => !string.IsNullOrEmpty(w))
                .Select(int.Parse)
                .ToArray();
            int height = numbers[0];
            int width = numbers[1];
            var matrix = new int[height, width];
            for (int y = 0; y < height; ++y)
            {
                numbers = Regex.Split(Console.ReadLine(), @"\s+")
                .Where(w => !string.IsNullOrEmpty(w))
                .Select(int.Parse)
                .ToArray();
                for (int x = 0; x < width; ++x)
                    matrix[y, x] = numbers[x];
            }
            return matrix;
        }
 
        private static int[,] GetMinWayMatrix(int[,] matrix)
        {
            int width = matrix.GetLength(1);
            int height = matrix.GetLength(0);
            var result = new int[height, width];
            result[0, 0] = matrix[0, 0];
            for (int y = 1; y < height; ++y)
                result[y, 0] = result[y - 1, 0] + matrix[y, 0];
            for (int x = 1; x < width; ++x)
                result[0, x] = result[0, x - 1] + matrix[0, x];
            for (int y = 1; y < height; ++y)
                for (int x = 1; x < width; ++x)
                    result[y, x] = Math.Min(result[y, x-1], result[y-1, x]) + matrix[y, x];
            return result;
        }
 
        private static string GetWay(int[,] minWayMatrix)
        {
            var way = new StringBuilder();
            int x = minWayMatrix.GetLength(1) - 1;
            int y = minWayMatrix.GetLength(0) - 1;
            while (x != 0 && y != 0)
            {
                int left = minWayMatrix[y, x - 1];
                int top = minWayMatrix[y - 1, x];
                if (left < top)
                {
                    way.Append("R");
                    --x;
                }
                else
                {
                    way.Append("D");
                    --y;
                }
            }
            way.Append(x == 0 ? new string('D', y) : new string('R', x));
            return new string(way.ToString().Reverse().ToArray());
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5
Похожие ответы