Loading...
DVatkov avatar DVatkov 3 Точки

Задача 03.Increasing Crisis от Array and List Algorithms -More Exercises

Моля, за малко помощ...

Не мога да хвана,някое изключение..Ето и кода:

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

namespace _03.Increasing_Crisis
{
    class Program
    {
        static void Main(string[] args)
        {
            var n = int.Parse(Console.ReadLine());
            var output = new List<int>();

            for (int i = 0; i < n; i++)
            {
                var input = Console.ReadLine().Split(' ').Select(int.Parse).ToList();
                var rightMostElement = 0;
                var position = 0;
                var isBreak = false;
                if (output.Count==0)
                {
                    for (int j = 0; j <input.Count ; j++)
                    {
                        output.Add(input[j]);
                    }
                }
                else
                {
                   for (int k = 0; k < output.Count; k++)
                   {
                        if (input[0] > output[k])
                        {
                            rightMostElement = output[k];
                            position = output.IndexOf(rightMostElement);
                        }
                        else if (input[0]==output[k])
                        {
                            position++;
                        }
                   }
                    if (input[0] >= output[0])
                    {
                        output.InsertRange(position + 1, input);
                    }
                   
                }
                var breakElement = 0;
                var breakPosition = 0;
                for (int j = 1; j < output.Count; j++)
                {
                    if (output[j] < output[j-1])
                    {
                        breakElement = output[j];
                        breakPosition = output.LastIndexOf(breakElement);
                        isBreak = true;
                        break;
                    }
                }
                if (isBreak)
                {
                    for (int j = output.Count-1; j >=breakPosition; j--)
                    {
                        output.RemoveAt(j);
                    }
                }
            }
            Console.WriteLine(string.Join(" ",output));
        }
    }
}

 

Тагове:
1
Programming Fundamentals
Bullsized avatar Bullsized 153 Точки

ето едно примерно решение от мен

но като гледам какъв ред съм си закоментирал отдолу и ми става ясно, че тва е мега грозна задача. поне решението е 100/100 и с него можеш да осъзнаеш какво е Hadouken if :)
0
spzvtbg avatar spzvtbg 581 Точки

тези задачи са такива и твоя е добре, погледни тук - 2 пъти по дълъг е. но съм сигурен че като стигнем пак до там ще ги решим по - добре.

1
05/06/2017 23:34:12
selfy avatar selfy 0 Точки

Bullsized, spzvtbg, вашите решения действително дават 100/100 в judge, но не смятам, че дават правилни решения на:

3
1 3 5 6
1 5 1
1 2 3
-------------
1 1 1 2 3 5, а правилният отговор би трябвало да е: 1 1 1 2 3

 

4
1 3 7
9 11 3
17 8 1 3 6
16 17 19 2
-------------
1 3 7 9 11 16 17 19, а правилният отговор би трябвало да е: 1 3 7 9 11 16 17

 

Отделно от това, не смятам, че в кода на Bullsized е редно да се сортира първият подаден масив...

 

При мен гърми последният тест в judge и дава 80/100.

0
08/09/2017 01:18:10
Dimitar_Petkov_Petkov avatar Dimitar_Petkov_Petkov 169 Точки

Здравейте!

И аз я докарах до 80 от 100, но според условието - се добавя числото преди "чупещото" и тогава:

3
1 3 5 6
1 5 1
1 2 3

би трябвало да е : 1 1 1 2 3 3 5 5

а 

4
1 3 7
9 11 3
17 8 1 3 6
16 17 19 2

би трябвало да е: 1 3 7 9 11 16 17 17 19

Или греша ?

P.S това е моят "мазеляк"   https://github.com/morskibg/CS_trainingAtWork/blob/master/1/Program.cs

0
29/09/2017 00:55:08
spzvtbg avatar spzvtbg 581 Точки

на тази задача ме тормози същия случай, мепомня условието добре но мисля че числата трябва да се добавят едно по едно в нарастваща поредица (погледни и примерите) и в момента в който следващото стане по малко (независимо от кой лист или арей триеш всичко останало и от двете ) 

2 4 6

3 5 7

=> резултат ?  ще мине през джъдж :  кажи, ще ти го дам и него ; 

 

0
05/06/2017 23:35:05
Mystical avatar Mystical 0 Точки

Зравейте колеги

 

Не мога да разбера защо това решение ми дава 80/100

Моля, ако някой има време бих искал да ми обясни:

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

class Program
{
    
    public static void Main()
    {
        
        //Console.WriteLine("80/100");
        
        int n = int.Parse(Console.ReadLine());
        
        List<int> numbers = new List<int>();
        numbers.AddRange((Console.ReadLine()).Split(' ').Select(int.Parse).ToList());
        
        for(int i=0;i<n-1;i++)
        {
            numbers = MergeLists(numbers,(Console.ReadLine()).Split(' ').Select(int.Parse).ToList());
        }
        Console.WriteLine(string.Join(" ",numbers));
        
    }
    
    public static List<int> ExtractIncreasingList(List<int> list)
    {
        
        //get the index who breaks the increasing order
        
        int BreakingIndex=-1;
        for(int i=0;i<list.Count-1;i++)
        {
            if(list[i]>list[i+1])
            {
                BreakingIndex=i+1;
                break;
            }
        }
        
        //remove everything starting from broken index if the list is NOT increasing
        if(BreakingIndex!=-1)
        list.RemoveRange(BreakingIndex,list.Count-BreakingIndex);
        
        return list;
    }
    
    public static List<int> MergeLists(List<int> original, List<int> New)
    {
        
        int First = New.First();
        
        //find the index where "New" needs to be inserted
        
        for(int i=original.Count-1;i>=0;i--)
        {
            
            if(original[i]<=First)
            {
                
                //insert "New"
                original.InsertRange(i+1,New);
                break;
            }
            
        }
        original = ExtractIncreasingList(original);
        
        return original;
    }
    
    
    
    
}

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.