Задача A.Раунд 311

Правка ru2, от rus100, 2015-06-30 20:47:14

Недавно только я решал раунд 311.Как всегда, ориентируясь на свои силы, я попытался решить задачу A.Решение прошло всего 3 теста, на 4 падало.Я не знал почему, не догадывался.После окончания раунда я посмотрел решения других и некоторые тесты, и тест 4 соответственно.Проверив на своем компьютере, я получил исключение "System.OutOfMemoryException", что означает переполнение памяти.Пока решал у меня были сомнения, что будет что-то подобное, поскольку три диапазона чисел, следовательно, дерево с тремя уровнями, и три цикла вложенных друг в друга.При малых n-количество дипломов, такое решение даже проходит, но при больших приводит к зависанию.Вот мой код бестолковый: ~~~~~

using System; using System.Collections.Generic; using System.Linq; using System.Text;

namespace ConsoleApplication6 { class Program { static void Main(string[] args) { int n=Convert.ToInt32(Console.ReadLine()); string str1 = Console.ReadLine(); string str2 = Console.ReadLine(); string str3 = Console.ReadLine(); string[] strin1 = str1.Split(' '); string[] strin2 = str2.Split(' '); string[] strin3 = str3.Split(' '); long min1 = long.Parse(strin1[0]); long max1 = long.Parse(strin1[1]); long min2 = long.Parse(strin2[0]); long max2 = long.Parse(strin2[1]); long min3 = long.Parse(strin3[0]); long max3 = long.Parse(strin3[1]); long [, ,] mass=new long[max1-min1+1,max2-min2+1,max3-min3+1]; for (long i = max1; i >=min1; i--) { for (long j = max2; j >= min2; j--) { for (long k = max3; k >=min3; k--) { if (i + j + k == n) { mass[i — min1, j — min2, k — min3] = 1;

}
                    else { mass[i - min1, j - min2, k - min3] = 0; }
                }
            }
         }
        string s="";
        for (long k = max3; k >= min3; k--)
        {    
            for (long j = max2; j >= min2; j--)
            {
                for (long i = max1; i >= min1; i--)
                {
                  if (mass[i - min1, j - min2, k - min3] ==1){
                      s=i.ToString()+" "+j.ToString()+" "+k.ToString();
                      break;
                  }    
                }
            }
        }
        Console.WriteLine(s);
         Console.ReadLine();
    }
}

}

~~~~~

Теги ошибка века

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
ru4 Русский rus100 2015-06-30 20:49:01 74
ru3 Русский rus100 2015-06-30 20:47:40 2 Мелкая правка: 'естолковый:\n~~~~~\n\' -> 'естолковый.\n~~~~~\n\'
ru2 Русский rus100 2015-06-30 20:47:14 4
ru1 Русский rus100 2015-06-30 20:46:25 2705 Первая редакция (опубликовано)