Beispiel #1
0
    static object Solve()
    {
        var n  = int.Parse(Console.ReadLine());
        var s0 = Console.ReadLine().Select(c => c == 'B').ToArray();
        var t  = Console.ReadLine().Select(c => c == 'B').ToArray();

        var s = new IndexedList <bool>();

        foreach (var v in s0)
        {
            s.Add(v);
        }

        var r = 0L;
        // 先行インデックス
        var q = 0;

        for (int i = 0; i < n; i++)
        {
            var v = s[i];
            if (v == t[i])
            {
                continue;
            }

            if (i == n - 1)
            {
                return(-1);
            }

            q = Math.Max(q, i);
            while (q + 1 < n && s[q] != s[q + 1])
            {
                q++;
            }
            if (q == n - 1)
            {
                return(-1);
            }

            r += q - i + 1;
            s.RemoveAt(q);
            s.RemoveAt(q);
            s.Insert(i, !v);
            s.Insert(i, !v);
        }

        if (!s.SequenceEqual(t))
        {
            throw new InvalidOperationException();
        }

        return(r);
    }
Beispiel #2
0
        public void TestAddRemoveAndClearMethods()
        {
            var sut = new IndexedList <ItemMetadata>();

            sut.AddIndex("Idx", metadata => metadata.BlobRef);

            var item1 = new ItemMetadata
            {
                BlobRef = Guid.NewGuid().ToString(),
                Name    = "Tag",
                Value   = "Cuba"
            };

            var item2 = new ItemMetadata
            {
                BlobRef = Guid.NewGuid().ToString(),
                Name    = "Tag",
                Value   = "beach"
            };

            var item3 = new ItemMetadata
            {
                BlobRef = Guid.NewGuid().ToString(),
                Name    = "Tag",
                Value   = "pooltable"
            };

            Assert.That(sut.Count, Is.EqualTo(0));

            sut.Add(item1);

            Assert.That(sut.Count, Is.EqualTo(1));

            sut.Add(item2);

            Assert.That(sut.Count, Is.EqualTo(2));

            sut.Insert(1, item3);
            Assert.That(sut.Count, Is.EqualTo(3));

            sut.RemoveAt(2);

            Assert.That(sut.Count, Is.EqualTo(2));
            Assert.That(sut[0].Value, Is.EqualTo("Cuba"));

            sut.Clear();

            Assert.That(sut.Count, Is.EqualTo(0));
        }