Submission #46114358
Source Code Expand
Copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
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 |
|
|
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 |