Submission #41550544


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 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, M) = Scanner.Scan<int, int>();
            var S = new string[N];
            for (var i = 0; i < N; i++)
            {
                S[i] = Scanner.Scan<string>();
            }

            foreach (var perm in Permute(Enumerable.Range(0, N)))
            {
                var answer = true;
                for (var k = 0; k + 1 < N; k++)
                {
                    var curr = perm[k];
                    var next = perm[k + 1];
                    var diff = 0;
                    for (var i = 0; i < M; i++)
                    {
                        if (S[curr][i] != S[next][i]) diff++;
                    }

                    answer &= diff == 1;
                }

                if (answer)
                {
                    Console.WriteLine("Yes");
                    return;
                }
            }

            Console.WriteLine("No");
        }

        public static IEnumerable<T[]> Permute<T>(IEnumerable<T> source)
        {
            if (source is null) throw new ArgumentNullException(nameof(source));
            IEnumerable<T[]> Inner()
            {
                var items = source.ToArray();
                var n = items.Length;
                var indices = new int[n];
                for (var i = 0; i < indices.Length; i++)
                {
                    indices[i] = i;
                }
                T[] Result()
                {
                    var result = new T[n];
                    for (var i = 0; i < n; i++)
                    {
                        result[i] = items[indices[i]];
                    }
                    return result;
                }
                yield return Result();
                while (true)
                {
                    var (i, j) = (n - 2, n - 1);
                    while (i >= 0)
                    {
                        if (indices[i] < indices[i + 1]) break;
                        i--;
                    }
                    if (i == -1) yield break;
                    while (true)
                    {
                        if (indices[j] > indices[i]) break;
                        j--;
                    }
                    (indices[i], indices[j]) = (indices[j], indices[i]);
                    Array.Reverse(indices, i + 1, n - 1 - i);
                    yield return Result();
                }
            }
            return Inner();
        }

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

Submission Info

Submission Time
Task C - Almost Equal
User AconCavy
Language C# (.NET Core 3.1.201)
Score 250
Code Size 5409 Byte
Status AC
Exec Time 91 ms
Memory 30444 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 250 / 250
Status
AC × 3
AC × 40
Set Name Test Cases
Sample example_00.txt, example_01.txt, example_02.txt
All example_00.txt, example_01.txt, example_02.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt
Case Name Status Exec Time Memory
example_00.txt AC 86 ms 28232 KiB
example_01.txt AC 75 ms 27948 KiB
example_02.txt AC 88 ms 29928 KiB
test_00.txt AC 87 ms 27656 KiB
test_01.txt AC 79 ms 27964 KiB
test_02.txt AC 80 ms 27976 KiB
test_03.txt AC 75 ms 28120 KiB
test_04.txt AC 76 ms 28032 KiB
test_05.txt AC 76 ms 28116 KiB
test_06.txt AC 79 ms 27964 KiB
test_07.txt AC 79 ms 27652 KiB
test_08.txt AC 77 ms 27644 KiB
test_09.txt AC 78 ms 27932 KiB
test_10.txt AC 80 ms 27928 KiB
test_11.txt AC 86 ms 30048 KiB
test_12.txt AC 85 ms 30068 KiB
test_13.txt AC 81 ms 30268 KiB
test_14.txt AC 85 ms 29860 KiB
test_15.txt AC 76 ms 30004 KiB
test_16.txt AC 81 ms 28752 KiB
test_17.txt AC 78 ms 28700 KiB
test_18.txt AC 82 ms 28880 KiB
test_19.txt AC 80 ms 28148 KiB
test_20.txt AC 75 ms 28240 KiB
test_21.txt AC 88 ms 28680 KiB
test_22.txt AC 85 ms 28600 KiB
test_23.txt AC 87 ms 30176 KiB
test_24.txt AC 85 ms 29864 KiB
test_25.txt AC 87 ms 30260 KiB
test_26.txt AC 86 ms 30064 KiB
test_27.txt AC 91 ms 29860 KiB
test_28.txt AC 84 ms 30176 KiB
test_29.txt AC 83 ms 30444 KiB
test_30.txt AC 79 ms 28196 KiB
test_31.txt AC 79 ms 27648 KiB
test_32.txt AC 74 ms 27792 KiB
test_33.txt AC 79 ms 28232 KiB
test_34.txt AC 82 ms 28924 KiB
test_35.txt AC 87 ms 27840 KiB
test_36.txt AC 82 ms 27960 KiB