提出 #38202828


ソースコード 拡げる

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

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

        public static void Solve()
        {
            var (N, A, B) = Scanner.Scan<int, long, long>();
            var S = Scanner.Scan<string>();
            const long inf = (long)1e18;
            var answer = inf;
            for (var i = 0; i < N; i++)
            {
                if (A * i >= answer) continue;
                var sum = A * i;
                var T = Shift<char>(S, -i);

                for (var j = 0; j * 2 < N; j++)
                {
                    if (T[j] == T[N - 1 - j]) continue;
                    sum += B;
                }

                answer = Math.Min(answer, sum);
            }

            Console.WriteLine(answer);
        }

        public static T[] Shift<T>(ReadOnlySpan<T> source, int shift)
        {
            shift = (shift + source.Length) % source.Length;
            if (shift == 0) return source.ToArray();
            var result = new T[source.Length];
            source[^shift..].CopyTo(result.AsSpan(..shift));
            source[..^shift].CopyTo(result.AsSpan(shift..));
            return result;
        }

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

提出情報

提出日時
問題 C - Rotate and Palindrome
ユーザ AconCavy
言語 C# (.NET Core 3.1.201)
得点 300
コード長 3959 Byte
結果 AC
実行時間 131 ms
メモリ 46400 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 300 / 300
結果
AC × 2
AC × 17
セット名 テストケース
Sample 00_sample_01.txt, 00_sample_02.txt
All 00_sample_01.txt, 00_sample_02.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt
ケース名 結果 実行時間 メモリ
00_sample_01.txt AC 75 ms 27444 KiB
00_sample_02.txt AC 80 ms 27428 KiB
01_test_01.txt AC 131 ms 45964 KiB
01_test_02.txt AC 75 ms 27244 KiB
01_test_03.txt AC 74 ms 27296 KiB
01_test_04.txt AC 125 ms 46212 KiB
01_test_05.txt AC 109 ms 46028 KiB
01_test_06.txt AC 120 ms 46048 KiB
01_test_07.txt AC 128 ms 46400 KiB
01_test_08.txt AC 80 ms 27476 KiB
01_test_09.txt AC 84 ms 27460 KiB
01_test_10.txt AC 88 ms 27284 KiB
01_test_11.txt AC 72 ms 27312 KiB
01_test_12.txt AC 98 ms 46024 KiB
01_test_13.txt AC 82 ms 33092 KiB
01_test_14.txt AC 83 ms 30084 KiB
01_test_15.txt AC 89 ms 32308 KiB