Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият.
Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание.
Използваме бисквитки и за измерване на маркетинговите ни усилия.
Задачата е legendary farming от Contests Advanced-CSharp-Exercises Sets and Dictionaries. Ето примерен input, който ползва judge:
3 Motes 5 stones 5 Shards
6 leathers 255 fragments 7 Shards
Ето код: http://pastebin.com/UMfT644a
Грешката е в метода ти на сортиране според мен.
Забелязвам че сортираш данните в списък, и после от този списък ги принтираш.. Тук трябваше да пробваш дали този вид сортировка работи - е аз пробвах твоя метод и резулатата беше следния:
1. ConsoleWriteLine(pair.Key); = key (всичко е наре)
2. ConsoleWriteLine(pair.Value) = Value (и тук всичко е както трябва).
За самия тест използвах нормалната сортировка ((pair1, pair2) => pair2.Value.CompareTo(pair1.Value));
Обаче когато пуснах да отпечата вече сортирания списък елемент по елемент както се иска, резултата беше абсолютно същия както и преди сортировката : първо ми отпечата фрагменти, после шардове и т.н (по стойност в низходящ ред).
Съветвам те за сортировка да използваш това:
По този начин би трябвало всичко да работи както трябва. Прегледах ти кода и не забелязах някакви грешки в логиката, само това сортиране със списъка.
Надявам да съм помогнал. Поздрави !
Мерси! Judge прие този вариант. Но за мен мистерията остава, защото при мен двата кода генерират един и същ output. А при теб явно връщат различен.
Поздрави!
Светльо
Код 1:
var keyMaterialQuantityList = keyMaterialQuantity.ToList();
keyMaterialQuantityList.Sort((pair1, pair2) => pair2.Value.CompareTo(pair1.Value));
foreach (var item in keyMaterialQuantityList)
{
Console.WriteLine($"{item.Key}: {item.Value}");
}
Код 2:
var sorted = from pair in keyMaterialQuantity
orderby pair.Value descending
select pair;
foreach (var pair in sorted)
{
Console.WriteLine("{0}: {1}", pair.Key, pair.Value);
}
Начина на сортиране със списък нещо се чупи. Когато го тествах, бях сменил реда от низходящ към възходящ, и промяна нямаше - това ме наведе на идеята, че просто не ги сортира. Иначе изходът е един и същ, заради реда в който са вкарани елементите в речника ( фрагменти, после шардове и тн.) - в C# редът на вкарване се запазва.
Sort() е нестабилно сортиране. При два еднакви елемента на различна машина може да се държи по различен начин.
Щом sort() е непредсказуем, значи никога да не го ползваме, така ли излиза?
За judge задачи по-добре не го ползвай. Има смисъл да се ползва когато не те интересува подредбата на два елемента, които са еднакви според сортиращата функция.
Дори при нестабилно сортиране пак трябва да се вадят същите резултати. Това че машините са различни не е от значение, все пак .NET Framework-ът си е един и същ, следователно и кода на алгоритъма. Според този пост до .NET 4.0 Array.Sort() ползва QuickSort, a от версия 4.5 нагоре са сменили на Introsort (QuickSort + Insertion Sort). Може би компилираш до по-стара версия от 4.5 и от там идва разминаването?
Много ви благодаря за отговорите! Светна ми.