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);
    }