Submission #46114358


Source Code Expand

Copy
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()
{
using var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
Console.SetOut(sw);
Solve();
Console.Out.Flush();
}
public static void Solve()
{
 
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
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()
    {
        using var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
        Console.SetOut(sw);
        Solve();
        Console.Out.Flush();
    }

    public static void Solve()
    {
        const int N = 4;
        var P = new char[3][,];
        for (var k = 0; k < 3; k++)
        {
            P[k] = new char[N, N];
            for (var i = 0; i < N; i++)
            {
                var p = Scanner.Scan<string>().ToCharArray();
                for (var j = 0; j < N; j++)
                {
                    P[k][i, j] = p[j];
                }
            }
        }

        var G = new char[N, N];
        const int Inf = 1 << 30;
        void Init(char[,] g)
        {
            for (var i = 0; i < N; i++)
            {
                for (var j = 0; j < N; j++)
                {
                    g[i, j] = '.';
                }
            }
        }

        char[,] Rotate(char[,] p)
        {
            var tmp = new char[N, N];
            for (var i = 0; i < N; i++)
            {
                for (var j = 0; j < N; j++)
                {
                    tmp[i, j] = p[j, N - 1 - i];
                }
            }

            var h = Inf;
            var w = Inf;
            for (var i = 0; i < N; i++)
            {
                for (var j = 0; j < N; j++)
                {
                    if (tmp[i, j] == '#')
                    {
                        h = Math.Min(h, i);
                        w = Math.Min(w, j);
                    }
                }
            }

            var result = new char[N, N];
            if (h == Inf) return result;
            for (var i = 0; h + i < N; i++)
            {
                for (var j = 0; w + j < N; j++)
                {
                    result[i, j] = tmp[h + i, w + j];
                }
            }

            return result;
        }

        bool Fill(char[,] p, int dh, int dw)
        {
            for (var i = 0; i < N; i++)
            {
                for (var j = 0; j < N; j++)
                {
                    if (p[i, j] == '#')
                    {
                        if (dh + i < N && dw + j < N && G[dh + i, dw + j] != '#')
                        {
                            G[dh + i, dw + j] = '#';
                        }
                        else
                        {
                            return false;
                        }
                    }
                }
            }

            return true;
        }

        IEnumerable<(int dh, int dw)> Delta()
        {
            for (var h = 0; h < N; h++)
            {
                for (var w = 0; w < N; w++)
                {
                    yield return (h, w);
                }
            }
        }

        for (var a = 0; a < 4; a++)
        {
            P[0] = Rotate(P[0]);
            for (var b = 0; b < 4; b++)
            {
                P[1] = Rotate(P[1]);
                for (var c = 0; c < 4; c++)
                {
                    P[2] = Rotate(P[2]);
                    foreach (var (dha, dwa) in Delta())
                    {
                        foreach (var (dhb, dwb) in Delta())
                        {
                            foreach (var (dhc, dwc) in Delta())
                            {
                                var ok = true;
                                Init(G);
                                ok &= Fill(P[0], dha, dwa);
                                ok &= Fill(P[1], dhb, dwb);
                                ok &= Fill(P[2], dhc, dwc);

                                for (var i = 0; i < N && ok; i++)
                                {
                                    for (var j = 0; j < N && ok; j++)
                                    {
                                        ok &= G[i, j] == '#';
                                    }
                                }

                                if (ok)
                                {
                                    Console.WriteLine("Yes");
                                    // Console.WriteLine();
                                    // Printer.Print2D(G);
                                    return;
                                }
                            }
                        }
                    }
                }
            }
        }

        Console.WriteLine("No");
    }

    public static class Printer
    {
        public static void Print<T>(T source) => Console.WriteLine(source);
        public static void Print1D<T>(IEnumerable<T> source, string separator = "") => Console.WriteLine(string.Join(separator, source));
        public static void Print1D<T, U>(IEnumerable<T> source, Func<T, U> selector, string separator = "") => Console.WriteLine(string.Join(separator, source.Select(selector)));
        public static void Print2D<T>(IEnumerable<IEnumerable<T>> source, string separator = "") => Console.WriteLine(string.Join(Environment.NewLine, source.Select(x => string.Join(separator, x))));
        public static void Print2D<T, U>(IEnumerable<IEnumerable<T>> source, Func<T, U> selector, string separator = "") => Console.WriteLine(string.Join(Environment.NewLine, source.Select(x => string.Join(separator, x.Select(selector)))));
        public static void Print2D<T>(T[,] source, string separator = "")
        {
            var (h, w) = (source.GetLength(0), source.GetLength(1));
            for (var i = 0; i < h; i++)
            {
                for (var j = 0; j < w; j++)
                {
                    Console.Write(source[i, j]);
                    Console.Write(j == w - 1 ? Environment.NewLine : separator);
                }
            }
        }
        public static void Print2D<T, U>(T[,] source, Func<T, U> selector, string separator = "")
        {
            var (h, w) = (source.GetLength(0), source.GetLength(1));
            for (var i = 0; i < h; i++)
            {
                for (var j = 0; j < w; j++)
                {
                    Console.Write(selector(source[i, j]));
                    Console.Write(j == w - 1 ? Environment.NewLine : separator);
                }
            }
        }
    }

    public static class Scanner
    {
        public static T Scan<T>() where T : IConvertible => Convert<T>(ScanStringArray()[0]);
        public static (T1, T2) Scan<T1, T2>() where T1 : IConvertible where T2 : IConvertible
        {
            var input = ScanStringArray();
            return (Convert<T1>(input[0]), Convert<T2>(input[1]));
        }
        public static (T1, T2, T3) Scan<T1, T2, T3>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible
        {
            var input = ScanStringArray();
            return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[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 input = ScanStringArray();
            return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[2]), Convert<T4>(input[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 input = ScanStringArray();
            return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[2]), Convert<T4>(input[3]), Convert<T5>(input[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 input = ScanStringArray();
            return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[2]), Convert<T4>(input[3]), Convert<T5>(input[4]), Convert<T6>(input[5]));
        }
        public static IEnumerable<T> ScanEnumerable<T>() where T : IConvertible => ScanStringArray().Select(Convert<T>);
        private static string[] ScanStringArray()
        {
            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 D - Polyomino
User AconCavy
Language C# 11.0 (.NET 7.0.7)
Score 400
Code Size 8936 Byte
Status AC
Exec Time 63 ms
Memory 25760 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 6
AC × 42
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, 00_sample_05.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, 00_sample_05.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt, 01_random_22.txt, 01_random_23.txt, 01_random_24.txt, 01_random_25.txt, 01_random_26.txt, 01_random_27.txt, 01_random_28.txt, 01_random_29.txt, 01_random_30.txt, 01_random_31.txt, 01_random_32.txt, 02_corner_00.txt, 02_corner_01.txt, 02_corner_02.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 47 ms 24556 KB
00_sample_01.txt AC 34 ms 24816 KB
00_sample_02.txt AC 54 ms 25620 KB
00_sample_03.txt AC 62 ms 25232 KB
00_sample_04.txt AC 47 ms 25204 KB
00_sample_05.txt AC 37 ms 25012 KB
01_random_00.txt AC 61 ms 25760 KB
01_random_01.txt AC 37 ms 24524 KB
01_random_02.txt AC 55 ms 25448 KB
01_random_03.txt AC 43 ms 24748 KB
01_random_04.txt AC 45 ms 24504 KB
01_random_05.txt AC 35 ms 24584 KB
01_random_06.txt AC 63 ms 25584 KB
01_random_07.txt AC 43 ms 24876 KB
01_random_08.txt AC 51 ms 25496 KB
01_random_09.txt AC 41 ms 24500 KB
01_random_10.txt AC 62 ms 25592 KB
01_random_11.txt AC 36 ms 24592 KB
01_random_12.txt AC 56 ms 25760 KB
01_random_13.txt AC 38 ms 24732 KB
01_random_14.txt AC 59 ms 25504 KB
01_random_15.txt AC 36 ms 24628 KB
01_random_16.txt AC 53 ms 25420 KB
01_random_17.txt AC 42 ms 25124 KB
01_random_18.txt AC 35 ms 24552 KB
01_random_19.txt AC 42 ms 24972 KB
01_random_20.txt AC 39 ms 25192 KB
01_random_21.txt AC 44 ms 25008 KB
01_random_22.txt AC 37 ms 24900 KB
01_random_23.txt AC 35 ms 24824 KB
01_random_24.txt AC 52 ms 25528 KB
01_random_25.txt AC 36 ms 24804 KB
01_random_26.txt AC 37 ms 24512 KB
01_random_27.txt AC 39 ms 24628 KB
01_random_28.txt AC 45 ms 24912 KB
01_random_29.txt AC 40 ms 24756 KB
01_random_30.txt AC 54 ms 25436 KB
01_random_31.txt AC 38 ms 24532 KB
01_random_32.txt AC 54 ms 25580 KB
02_corner_00.txt AC 38 ms 24776 KB
02_corner_01.txt AC 42 ms 24848 KB
02_corner_02.txt AC 43 ms 24836 KB


2025-04-08 (Tue)
13:41:10 +00:00