Submission #33993322


Source Code Expand

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Numerics;

namespace Tasks
{
    public class D
    {
        public static void Main()
        {
            var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
            Console.SetOut(sw);
            Solve();
            Console.Out.Flush();
        }

        public static void Solve()
        {
            const int N = 7;
            var S = Scanner.Scan<string>();

            int F(char c)
            {
                return c switch
                {
                    'a' => 0,
                    't' => 1,
                    'c' => 2,
                    'o' => 3,
                    'd' => 4,
                    'e' => 5,
                    'r' => 6,
                    _ => 7,
                };
            }

            var T = S.Select(x => F(x)).ToArray();
            var ft = new FenwickTree(10);
            var answer = 0L;
            for (var i = 0; i < N; i++)
            {
                var c = T[i];
                answer += i - ft.Sum(c + 1);
                ft.Add(c, 1);
            }

            Console.WriteLine(answer);
        }

        public class FenwickTree
        {
            public int Length { get; }
            private readonly long[] _data;
            public FenwickTree(int length)
            {
                if (length < 0) throw new ArgumentOutOfRangeException(nameof(length));
                Length = length;
                _data = new long[length];
            }
            public void Add(int index, long value)
            {
                if (index < 0 || Length <= index) throw new ArgumentOutOfRangeException(nameof(index));
                index++;
                while (index <= Length)
                {
                    _data[index - 1] += value;
                    index += index & -index;
                }
            }
            public long Sum(int length)
            {
                if (length < 0 || Length < length) throw new ArgumentOutOfRangeException(nameof(length));
                var s = 0L;
                while (length > 0)
                {
                    s += _data[length - 1];
                    length -= length & -length;
                }
                return s;
            }
            public long Sum(int left, int right)
            {
                if (left < 0 || right < left || Length < right) throw new ArgumentOutOfRangeException();
                return Sum(right) - Sum(left);
            }
            public int LowerBound(long value) => Bound(value, (x, y) => x <= y);
            public int UpperBound(long value) => Bound(value, (x, y) => x < y);
            private int Bound(long value, Func<long, long, bool> compare)
            {
                if (Length == 0 || compare(value, _data[0])) return 0;
                var x = 0;
                var r = 1;
                while (r < Length) r <<= 1;
                for (var k = r; k > 0; k >>= 1)
                {
                    if (x + k - 1 >= Length || compare(value, _data[x + k - 1])) continue;
                    value -= _data[x + k - 1];
                    x += k;
                }
                return x;
            }
        }

        public static class Scanner
        {
            public static string ScanLine() => Console.ReadLine()?.Trim() ?? string.Empty;
            public static string[] Scan() => ScanLine().Split(' ');
            public static T Scan<T>() where T : IConvertible => Convert<T>(Scan()[0]);
            public static (T1, T2) Scan<T1, T2>() where T1 : IConvertible where T2 : IConvertible
            {
                var line = Scan();
                return (Convert<T1>(line[0]), Convert<T2>(line[1]));
            }
            public static (T1, T2, T3) Scan<T1, T2, T3>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible
            {
                var line = Scan();
                return (Convert<T1>(line[0]), Convert<T2>(line[1]), Convert<T3>(line[2]));
            }
            public static (T1, T2, T3, T4) Scan<T1, T2, T3, T4>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible
            {
                var line = Scan();
                return (Convert<T1>(line[0]), Convert<T2>(line[1]), Convert<T3>(line[2]), Convert<T4>(line[3]));
            }
            public static (T1, T2, T3, T4, T5) Scan<T1, T2, T3, T4, T5>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible
            {
                var line = Scan();
                return (Convert<T1>(line[0]), Convert<T2>(line[1]), Convert<T3>(line[2]), Convert<T4>(line[3]), Convert<T5>(line[4]));
            }
            public static (T1, T2, T3, T4, T5, T6) Scan<T1, T2, T3, T4, T5, T6>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible where T6 : IConvertible
            {
                var line = Scan();
                return (Convert<T1>(line[0]), Convert<T2>(line[1]), Convert<T3>(line[2]), Convert<T4>(line[3]), Convert<T5>(line[4]), Convert<T6>(line[5]));
            }
            public static IEnumerable<T> ScanEnumerable<T>() where T : IConvertible => Scan().Select(Convert<T>);
            private static T Convert<T>(string value) where T : IConvertible => (T)System.Convert.ChangeType(value, typeof(T));
        }
    }
}

Submission Info

Submission Time
Task D - "redocta".swap(i,i+1)
User AconCavy
Language C# (.NET Core 3.1.201)
Score 400
Code Size 5692 Byte
Status AC
Exec Time 91 ms
Memory 26808 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 3
AC × 30
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, test_adtecro.txt, test_aorecdt.txt, test_atcoder.txt, test_atdcroe.txt, test_ateocrd.txt, test_ctrdoae.txt, test_daotrce.txt, test_dcarteo.txt, test_eaotcdr.txt, test_ectodar.txt, test_eraodtc.txt, test_erdocta.txt, test_ertoacd.txt, test_etodarc.txt, test_oacretd.txt, test_rcatdoe.txt, test_rdeocta.txt, test_rdetoac.txt, test_rdoatce.txt, test_redcota.txt, test_redocat.txt, test_redocta.txt, test_redotca.txt, test_reodcta.txt, test_rtadceo.txt, test_toeardc.txt, test_treacod.txt
Case Name Status Exec Time Memory
sample_01.txt AC 75 ms 26532 KiB
sample_02.txt AC 83 ms 26544 KiB
sample_03.txt AC 72 ms 26516 KiB
test_adtecro.txt AC 76 ms 26564 KiB
test_aorecdt.txt AC 81 ms 26456 KiB
test_atcoder.txt AC 82 ms 26596 KiB
test_atdcroe.txt AC 81 ms 26532 KiB
test_ateocrd.txt AC 78 ms 26484 KiB
test_ctrdoae.txt AC 86 ms 26808 KiB
test_daotrce.txt AC 82 ms 26580 KiB
test_dcarteo.txt AC 76 ms 26732 KiB
test_eaotcdr.txt AC 83 ms 26564 KiB
test_ectodar.txt AC 83 ms 26464 KiB
test_eraodtc.txt AC 91 ms 26604 KiB
test_erdocta.txt AC 76 ms 26708 KiB
test_ertoacd.txt AC 76 ms 26512 KiB
test_etodarc.txt AC 80 ms 26664 KiB
test_oacretd.txt AC 79 ms 26748 KiB
test_rcatdoe.txt AC 76 ms 26656 KiB
test_rdeocta.txt AC 80 ms 26568 KiB
test_rdetoac.txt AC 76 ms 26544 KiB
test_rdoatce.txt AC 80 ms 26620 KiB
test_redcota.txt AC 79 ms 26568 KiB
test_redocat.txt AC 76 ms 26584 KiB
test_redocta.txt AC 73 ms 26564 KiB
test_redotca.txt AC 84 ms 26664 KiB
test_reodcta.txt AC 83 ms 26660 KiB
test_rtadceo.txt AC 84 ms 26548 KiB
test_toeardc.txt AC 77 ms 26528 KiB
test_treacod.txt AC 79 ms 26620 KiB