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

Revision ru4, by rus100, 2015-06-30 20:49:01

Недавно только я решал раунд 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();
        }
    }
}
Tags ошибка века

History

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