Блог пользователя AlexSkidanov

Автор AlexSkidanov, 15 лет назад, По-русски
В общем, все мои попытки показать, что моно шлак, и это НЕ C#, не увенчались успехом.
Забудем про то, что в Моно нет SortedSet, и участники, использующие C# оказываются позади тех, кто юзает C++ или Java по любой задаче, где надо строить любые деревья.

Практический пример. Задача E с последнего раунда. Решение за квадрат:

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

namespace moomoo
{
    class Program
    {
        static void Main(string[] args)
        {
            int k;
            int n;
            string s = Console.ReadLine();
            var ss = s.Split(' ');
            n = int.Parse(ss[0]);
            k = int.Parse(ss[1]);
            s = Console.ReadLine();
            int[] h = (from v in s.Split(' ') select int.Parse(v)).ToArray();

            int ans = 0;
            List<KeyValuePair<int, int>> ansv = new List<KeyValuePair<int, int>>();
            List<int> mx = new List<int>(); ;
            List<int> mn = new List<int>();
            int lf = 0;
            for (int i = 0; i < n; ++i)
            {
                mx.Add(h[i]);
                mn.Add(h[i]);
                mx.Sort(); mx.Reverse();
                mn.Sort();
                while (mx[0] - mn[0] > k)
                {
                    for (int j = 0; j < mn.Count; ++j) if (mn[j] == h[lf]) { mn.RemoveAt(j); break; }
                    for (int j = 0; j < mx.Count; ++j) if (mx[j] == h[lf]) { mx.RemoveAt(j); break; }
                    ++lf;
                }
                int cur = i - lf + 1;
                if (cur > ans)
                {
                    ans = cur;
                    ansv.Clear();
                    ansv.Add(new KeyValuePair<int, int>(lf + 1, i + 1));
                }
                else if (cur == ans)
                {
                    ansv.Add(new KeyValuePair<int, int>(lf + 1, i + 1));
                }

            }
            Console.WriteLine(ans + " " + ansv.Count);
            for (int i = 0; i < ansv.Count; ++i) Console.WriteLine(ansv[i].Key + " " + ansv[i].Value);
        }
    }
}

Очевидно получить TLE. Система возвращает RE на тесте 7.
Меняем местами первые две строки (int k; и int n;). Отправляем - RE на тесте 5. То есть порядок объявления переменных важен для прохождения двух тестов? Добавляем пробел, перевод строки, что угодно - RE на другом тесте. Можно дойти аж до девятого, можно упасть на первом.
Я переписывал это решение дважды целиком с нуля, и каждый раз эта история.
  • Проголосовать: нравится
  • +3
  • Проголосовать: не нравится

15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Ужас.

Эту Mono можно и оставить, для любителей. А то может у многих linux и они им взаправду пользуются.

А вот почему просто не добавить MSVS C# Express Edition, и правда непонятно.
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
В данном случае была ошибка конфигурации запуска mono. Теперь вы получаете заслуженный TLE. По поводу SortedSet. Я не специалист C# и .NET, но в документации написано, что он поддерживается, начиная с 4-й версии фреймворка. Эта версия сейчас находится в состоянии Release Candidate. Официальный стабильный релиз - 3.5, а в котором SortedSet отсутствует.

Если у вас есть еще аргументы почему mono "не должно быть", то самое время их написать.

Со своей стороны скажу, что MSVS С# отсутствует, так как .NET бинарники штука хитрая и мне не удается применить к ним общую политику безопасности, действующую на Codeforces. Видимо, здесь правильно использовать родные средства .NET для обеспечения запуска в песочнице. У меня есть более приоритетные задачи, чем прорываться через  это или это, тем более что мне это непросто, так как я не специалист в .NET.

Если кто-то подготовит способ компиляции file.cs в бинарник (dll или exe), а потом его последующего безопасного исполнения в песочнице (возможно, с привлечением других самописных классов и т.п.), то я быстро смогу это внедрить.

Другой момент. Дело в том, что .NET framework обновляется автоматически через Windows Update. Тестирование Codeforces происходит на большом количестве машин. В таком случае я не могу гарантировать, что на всех машинах стоит одинаковая версия .NET. По моему, участников это может расстроить.
  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Пока еще не до конца разобрался с настройкой mono, но думаю все поправлю.
  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Спасибо за исправление Моно :о)
    Правда только что попытались отправить задачу, поймали RE на первом тесте. Семпл запустили, RE не наблюдаю :о)
    Вообще даже есть код, который я в первом посте опубликовал, отсабмитить, ловится RE#1.

    Если SortedSet в .NET 3.5 отсутствует, то видимо вариантов на C# особых покодячить нет подобные задачки :о( Значит придется ждать, пока VC2010 выйдет, а Моно подтянется :о(
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
так VS не смысла ставить...
компилятор C# входит в .Net Framework SDK...
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
на счет отсутствия SortedSet в .Net 4.0 это не так...
там просто все коллекции сделали шаблонами перенесли в
System.Collections.Generic namespace
а старые объявили как depricated


  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Никто не говорит, что его нет в .NET 4.0 :о) Если бы его не было в 4.0, то где бы он вообще был :о
    Проблема была в том, что я писал из 2010 студии, и когда стало нужно дерево наугад набрал Sorted и попал на SortedSet, после чего получил по задаче CE и был очень разгневан :о) Потому что в .NET 3.5 SortedSet'а нету :о(
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
на счет отсутствия SortedSet в .Net 4.0 это не так...
там просто все коллекции сделали шаблонами перенесли в
System.Collections.Generic namespace
а старые объявили как depricated


15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
коменты по два раза постятся...)
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
"..участники, использующие C# оказываются позади тех, кто юзает C++ или Java.."
А скажите, как эту задачу тогда решать на джаве в таком стиле? Ведь в ней, насколько я понмаю, мультимножества нету!? Хотя можно конечно симитировать её с помощью Map и Set. Просто интересно можно ли как-нить по-другому?
»
13 лет назад, # |
  Проголосовать: нравится +17 Проголосовать: не нравится

Можно обновить Mono до последней версии? The current release version of Mono is 2.10.8. (Released December 19th, 2011).

»
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

У участников пишущих на паскале вообще шансов нет ;)