AlexSkidanov's blog

By AlexSkidanov, 14 years ago, In Russian
В общем, все мои попытки показать, что моно шлак, и это НЕ 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 на другом тесте. Можно дойти аж до девятого, можно упасть на первом.
Я переписывал это решение дважды целиком с нуля, и каждый раз эта история.
  • Vote: I like it
  • +3
  • Vote: I do not like it