Submission #21080942
Source Code Expand
using Kzrnm.Competitive.IO;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq.Expressions;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.Intrinsics.X86;
using System.Text;
using static Kzrnm.Competitive.BitOperationsEx;
using static Kzrnm.Competitive.Global;
partial class Program
{
partial void WriteBool(bool b) => cw.WriteLine(b ? "Yes" : "No");
bool __ManyTestCases() => false;
[MethodImpl(MethodImplOptions.AggressiveOptimization)]
private object Calc()
{
H = cr;
W = cr;
A = cr;
B = cr;
S = H * W;
cache = NewArray(A + 1, B + 1, 1 << S, -1L);
cache[0][0][^1] = 1;
return Calc(A, B, 0);
}
long[][][] cache;
long Calc(int a, int b, int s)
{
if (cache[a][b][s] >= 0) return cache[a][b][s];
var t = LSB(~s);
long sum = 0;
if (b > 0)
sum += Calc(a, b - 1, s | (1 << t));
if (a > 0)
{
if ((t + 1) % W != 0)
sum += Calc(a - 1, b, s | (0b11 << t));
if (t + W < S)
sum += Calc(a - 1, b, s | (1 << t) | (1 << (t + W)));
}
return cache[a][b][s] = sum;
}
public static int S;
public static int H;
public static int W;
public static int A;
public static int B;
}
#region Expanded by https://github.com/naminodarie/SourceExpander
//LICENSE: https://github.com/naminodarie/Kzrnm.Competitive/blob/master/LICENSE
namespace Kzrnm.Competitive{using static MethodImplOptions;public static class BitOperationsEx{[MethodImpl(AggressiveInlining)]public static int PopCount(int x)=>BitOperations.PopCount((uint)x);[MethodImpl(AggressiveInlining)]public static int PopCount(long x)=>BitOperations.PopCount((ulong)x);[MethodImpl(AggressiveInlining)]public static int MSB(int x)=>BitOperations.Log2((uint)x);[MethodImpl(AggressiveInlining)]public static int MSB(long x)=>BitOperations.Log2((ulong)x);[MethodImpl(AggressiveInlining)]public static int LSB(int x)=>BitOperations.TrailingZeroCount((uint)x);[MethodImpl(AggressiveInlining)]public static int LSB(long x)=>BitOperations.TrailingZeroCount((ulong)x);[MethodImpl(AggressiveInlining)]public static int ParallelBitDeposit(int x,uint mask)=>(int)ParallelBitDeposit((uint)x,mask);[MethodImpl(AggressiveInlining)]public static uint ParallelBitDeposit(uint x,uint mask){if(Bmi2.IsSupported)return Bmi2.ParallelBitDeposit(x,mask);return ParallelBitDepositLogic(x,mask);}internal static uint ParallelBitDepositLogic(uint x,uint mask){uint res=0;for(int i=0;mask>0;i++,mask>>=1){if((mask&1U)!=0){res|=(x&1U)<<i;x>>=1;}}return res;}[MethodImpl(AggressiveInlining)]public static int ParallelBitExtract(int x,uint mask)=>(int)ParallelBitExtract((uint)x,mask);[MethodImpl(AggressiveInlining)]public static uint ParallelBitExtract(uint x,uint mask){if(Bmi2.IsSupported)return Bmi2.ParallelBitExtract(x,mask);return ParallelBitExtractLogic(x,mask);}internal static uint ParallelBitExtractLogic(uint x,uint mask){uint res=0;int k=0;do{if((mask&1U)!=0)res|=(x&1U)<<k++;x>>=1;mask>>=1;}while(mask!=0);return res;}}}
namespace Kzrnm.Competitive{public static class Global{public static T[]NewArray<T>(int len0,T value)where T:struct=>new T[len0].Fill(value);public static T[]NewArray<T>(int len0,Func<T>factory){var arr=new T[len0];for(int i=0;i<arr.Length;i++)arr[i]=factory();return arr;}public static T[][]NewArray<T>(int len0,int len1,T value)where T:struct{var arr=new T[len0][];for(int i=0;i<arr.Length;i++)arr[i]=NewArray(len1,value);return arr;}public static T[][]NewArray<T>(int len0,int len1,Func<T>factory){var arr=new T[len0][];for(int i=0;i<arr.Length;i++)arr[i]=NewArray(len1,factory);return arr;}public static T[][][]NewArray<T>(int len0,int len1,int len2,T value)where T:struct{var arr=new T[len0][][];for(int i=0;i<arr.Length;i++)arr[i]=NewArray(len1,len2,value);return arr;}public static T[][][]NewArray<T>(int len0,int len1,int len2,Func<T>factory){var arr=new T[len0][][];for(int i=0;i<arr.Length;i++)arr[i]=NewArray(len1,len2,factory);return arr;}public static T[][][][]NewArray<T>(int len0,int len1,int len2,int len3,T value)where T:struct{var arr=new T[len0][][][];for(int i=0;i<arr.Length;i++)arr[i]=NewArray(len1,len2,len3,value);return arr;}public static T[][][][]NewArray<T>(int len0,int len1,int len2,int len3,Func<T>factory){var arr=new T[len0][][][];for(int i=0;i<arr.Length;i++)arr[i]=NewArray(len1,len2,len3,factory);return arr;}}}
internal partial class Program{static void Main()=>new Program(new PropertyConsoleReader(),new ConsoleWriter()).Run();public PropertyConsoleReader cr;public ConsoleWriter cw;public Program(PropertyConsoleReader r,ConsoleWriter w){this.cr=r;this.cw=w;CultureInfo.CurrentCulture=CultureInfo.InvariantCulture;}public void Run(){int Q=1;if(__ManyTestCases())Q=cr;for(;Q>0;Q--){var res=Calc();if(res is double d)cw.WriteLine(d.ToString("0.####################",CultureInfo.InvariantCulture));else if(res is bool b)WriteBool(b);else if(res!=null)cw.WriteLine(res.ToString());}cw.Flush();}partial void WriteBool(bool b);object Calc(Program dum=null)=>dum;bool __ManyTestCases(Program dum=null)=>false;}
namespace Kzrnm.Competitive.IO{public partial class ConsoleWriter:IDisposable{private const int DefaultBufferSize=1<<12;public StreamWriter StreamWriter{get;}public ConsoleWriter():this(Console.OpenStandardOutput(),Console.OutputEncoding,DefaultBufferSize){}public ConsoleWriter(Stream output,Encoding encoding):this(output,encoding,DefaultBufferSize){}public ConsoleWriter(Stream output,Encoding encoding,int bufferSize){StreamWriter=new StreamWriter(output,encoding,bufferSize);}public void Flush()=>StreamWriter.Flush();public ConsoleWriter WriteLine(){StreamWriter.WriteLine();return this;}public ConsoleWriter WriteLine<T>(T obj){StreamWriter.WriteLine(obj.ToString());return this;}public ConsoleWriter WriteLineJoin<T>(IEnumerable<T>col)=>WriteMany(' ',col);public ConsoleWriter WriteLineJoin<T1,T2>((T1,T2)tuple)=>WriteLineJoin(tuple.Item1,tuple.Item2);public ConsoleWriter WriteLineJoin<T1,T2,T3>((T1,T2,T3)tuple)=>WriteLineJoin(tuple.Item1,tuple.Item2,tuple.Item3);public ConsoleWriter WriteLineJoin<T1,T2,T3,T4>((T1,T2,T3,T4)tuple)=>WriteLineJoin(tuple.Item1,tuple.Item2,tuple.Item3,tuple.Item4);public ConsoleWriter WriteLineJoin<TTuple>(TTuple tuple)where TTuple:ITuple{var col=new object[tuple.Length];for(int i=0;i<col.Length;i++)col[i]=tuple[i];return WriteLineJoin(col);}public ConsoleWriter WriteLineJoin(params object[]col)=>WriteMany(' ',col);public ConsoleWriter WriteLineJoin<T1,T2>(T1 v1,T2 v2){StreamWriter.Write(v1.ToString());StreamWriter.Write(' ');StreamWriter.WriteLine(v2.ToString());return this;}public ConsoleWriter WriteLineJoin<T1,T2,T3>(T1 v1,T2 v2,T3 v3){StreamWriter.Write(v1.ToString());StreamWriter.Write(' ');StreamWriter.Write(v2.ToString());StreamWriter.Write(' ');StreamWriter.WriteLine(v3.ToString());return this;}public ConsoleWriter WriteLineJoin<T1,T2,T3,T4>(T1 v1,T2 v2,T3 v3,T4 v4){StreamWriter.Write(v1.ToString());StreamWriter.Write(' ');StreamWriter.Write(v2.ToString());StreamWriter.Write(' ');StreamWriter.Write(v3.ToString());StreamWriter.Write(' ');StreamWriter.WriteLine(v4.ToString());return this;}public ConsoleWriter WriteLines<T>(IEnumerable<T>col)=>WriteMany('\n',col);public ConsoleWriter WriteLineGrid<T>(IEnumerable<IEnumerable<T>>cols){foreach(var col in cols)WriteLineJoin(col);return this;}protected ConsoleWriter WriteMany<T>(char sep,IEnumerable<T>col){var en=col.GetEnumerator();if(!en.MoveNext())goto End;StreamWriter.Write(en.Current.ToString());while(en.MoveNext()){StreamWriter.Write(sep);StreamWriter.Write(en.Current.ToString());}End:StreamWriter.WriteLine();return this;}public void Dispose()=>Flush();}}
namespace Kzrnm.Competitive.IO{public partial class ConsoleWriter{public ConsoleWriter WriteLine(ReadOnlySpan<char>obj){StreamWriter.WriteLine(obj);return this;}public ConsoleWriter WriteLineJoin<T>(Span<T>col)=>WriteMany(' ',(ReadOnlySpan<T>)col);public ConsoleWriter WriteLineJoin<T>(ReadOnlySpan<T>col)=>WriteMany(' ',col);public ConsoleWriter WriteLines<T>(Span<T>col)=>WriteMany('\n',(ReadOnlySpan<T>)col);public ConsoleWriter WriteLines<T>(ReadOnlySpan<T>col)=>WriteMany('\n',col);protected ConsoleWriter WriteMany<T>(char sep,ReadOnlySpan<T>col){var en=col.GetEnumerator();if(!en.MoveNext())return this;StreamWriter.Write(en.Current.ToString());while(en.MoveNext()){StreamWriter.Write(sep);StreamWriter.Write(en.Current.ToString());}StreamWriter.WriteLine();return this;}}}
namespace Kzrnm.Competitive{using static MethodImplOptions;public static class ArrayExtension{[MethodImpl(AggressiveInlining)]public static T[]Fill<T>(this T[]arr,T value){arr.AsSpan().Fill(value);return arr;}[MethodImpl(AggressiveInlining)]public static T[]Sort<T>(this T[]arr){Array.Sort(arr);return arr;}[MethodImpl(AggressiveInlining)]public static string[]Sort(this string[]arr)=>Sort(arr,StringComparer.Ordinal);[MethodImpl(AggressiveInlining)]public static T[]Sort<T,U>(this T[]arr,Expression<Func<T,U>>selector)where U:IComparable<U> =>Sort(arr,ExComparer<T>.CreateExp(selector));[MethodImpl(AggressiveInlining)]public static T[]Sort<T>(this T[]arr,Comparison<T>comparison){Array.Sort(arr,comparison);return arr;}[MethodImpl(AggressiveInlining)]public static T[]Sort<T>(this T[]arr,IComparer<T>comparer){Array.Sort(arr,comparer);return arr;}[MethodImpl(AggressiveInlining)]public static T[]Reverse<T>(this T[]arr){Array.Reverse(arr);return arr;}[MethodImpl(AggressiveInlining)]public static ref T Get<T>(this T[]arr,int index){if(index<0)return ref arr[arr.Length+index];return ref arr[index];}[MethodImpl(AggressiveInlining)]public static ref T GetOrDummy<T>(this T[]arr,int index,T dummy=default){if((uint)index<(uint)arr.Length)return ref arr[index];Dummy<T>.dummy=dummy;return ref Dummy<T>.dummy;}[MethodImpl(AggressiveInlining)]public static ref T GetOrDummy<T>(this T[][]arr,int index1,int index2,T dummy=default){if((uint)index1<(uint)arr.Length&&(uint)index2<(uint)arr[index1].Length)return ref arr[index1][index2];Dummy<T>.dummy=dummy;return ref Dummy<T>.dummy;}[MethodImpl(AggressiveInlining)]public static ref T GetOrDummy<T>(this T[][][]arr,int index1,int index2,int index3,T dummy=default){if((uint)index1<(uint)arr.Length&&(uint)index2<(uint)arr[index1].Length&&(uint)index3<(uint)arr[index1][index2].Length)return ref arr[index1][index2][index3];Dummy<T>.dummy=dummy;return ref Dummy<T>.dummy;}private static class Dummy<T>{public static T dummy;}}}
namespace Kzrnm.Competitive.IO{using static MethodImplOptions;public class PropertyConsoleReader{private const int BufSize=1<<12;private readonly Stream input;private readonly Encoding encoding;internal readonly byte[]buffer=new byte[BufSize];internal int pos=0;internal int len=0;public PropertyConsoleReader():this(Console.OpenStandardInput(),Console.InputEncoding){}public PropertyConsoleReader(Stream input,Encoding encoding){this.input=input;this.encoding=encoding;}[MethodImpl(AggressiveInlining)]protected internal byte Read(){if( ++pos>=len){if((len=input.Read(buffer,0,buffer.Length))<=0){buffer[0]=10;}pos=0;}return buffer[pos];}public int Int{[MethodImpl(AggressiveInlining)]get{int res=0;bool neg=false;byte b;do{b=Read();if(b=='-')neg=true;}while(b<'0');do{res=res*10+(b^'0');b=Read();}while('0'<=b);return neg?-res:res;}}public int Int0{[MethodImpl(AggressiveInlining)]get=>Int-1;}public uint UInt{[MethodImpl(AggressiveInlining)]get=>(uint)ULong;}public uint UInt0{[MethodImpl(AggressiveInlining)]get=>UInt-1;}public long Long{[MethodImpl(AggressiveInlining)]get{long res=0;bool neg=false;byte b;do{b=Read();if(b=='-')neg=true;}while(b<'0');do{res=res*10+(b^'0');b=Read();}while('0'<=b);return neg?-res:res;}}public long Long0{[MethodImpl(AggressiveInlining)]get=>Long-1;}public ulong ULong{[MethodImpl(AggressiveInlining)]get{ulong res=0;byte b;do b=Read();while(b<'0');do{res=res*10+(b^(ulong)'0');b=Read();}while('0'<=b);return res;}}public ulong ULong0{[MethodImpl(AggressiveInlining)]get=>ULong-1;}public string String{[MethodImpl(AggressiveInlining)]get{var sb=new List<byte>();;byte b;do b=Read();while(b<=' ');do{sb.Add(b);b=Read();}while(' '<b);return encoding.GetString(sb.ToArray());}}public string Ascii{[MethodImpl(AggressiveInlining)]get{var sb=new StringBuilder();byte b;do b=Read();while(b<=' ');do{sb.Append((char)b);b=Read();}while(' '<b);return sb.ToString();}}public string Line{[MethodImpl(AggressiveInlining)]get{var sb=new List<byte>();byte b;do b=Read();while(b<=' ');do{sb.Add(b);b=Read();}while(b!='\n'&&b!='\r');return encoding.GetString(sb.ToArray());}}public char Char{[MethodImpl(AggressiveInlining)]get{byte b;do b=Read();while(b<=' ');return(char)b;}}public double Double{[MethodImpl(AggressiveInlining)]get{return double.Parse(Ascii);}}public decimal Decimal{[MethodImpl(AggressiveInlining)]get{return decimal.Parse(Ascii);}}[MethodImpl(AggressiveInlining)]public static implicit operator int(PropertyConsoleReader cr)=>cr.Int;[MethodImpl(AggressiveInlining)]public static implicit operator uint(PropertyConsoleReader cr)=>cr.UInt;[MethodImpl(AggressiveInlining)]public static implicit operator long(PropertyConsoleReader cr)=>cr.Long;[MethodImpl(AggressiveInlining)]public static implicit operator ulong(PropertyConsoleReader cr)=>cr.ULong;[MethodImpl(AggressiveInlining)]public static implicit operator double(PropertyConsoleReader cr)=>cr.Double;[MethodImpl(AggressiveInlining)]public static implicit operator decimal(PropertyConsoleReader cr)=>cr.Decimal;[MethodImpl(AggressiveInlining)]public static implicit operator string(PropertyConsoleReader cr)=>cr.Ascii;}}
namespace Kzrnm.Competitive{public static class ExComparer<T>{class ExpressionComparer<K>:IComparer<T>where K:IComparable<K>{private class ParameterReplaceVisitor:ExpressionVisitor{private readonly ParameterExpression from;private readonly ParameterExpression to;public ParameterReplaceVisitor(ParameterExpression from,ParameterExpression to){this.from=from;this.to=to;}protected override Expression VisitParameter(ParameterExpression node)=>node==from?to:base.VisitParameter(node);}readonly Comparison<T>func;public ExpressionComparer(Expression<Func<T,K>>expression){var paramA=expression.Parameters[0];var paramB=Expression.Parameter(typeof(T));var f2=(Expression<Func<T,K>>)new ParameterReplaceVisitor(expression.Parameters[0],paramB).Visit(expression);var compExp=Expression.Lambda<Comparison<T>>(Expression.Call(expression.Body,typeof(K).GetMethod(nameof(IComparable<K>.CompareTo),new[]{typeof(K)}),f2.Body),paramA,paramB);this.func=compExp.Compile();}public int Compare(T x,T y)=>func(x,y);public override bool Equals(object obj)=>obj is ExpressionComparer<K>c&&this.func==c.func;public override int GetHashCode()=>func.GetHashCode();}public static IComparer<T>CreateExp<K>(Expression<Func<T,K>>expression)where K:IComparable<K> =>new ExpressionComparer<K>(expression);}}
#endregion Expanded by https://github.com/naminodarie/SourceExpander
Submission Info
| Submission Time |
|
| Task |
D - Hanjo |
| User |
kzrnm |
| Language |
C# (.NET Core 3.1.201) |
| Score |
400 |
| Code Size |
15121 Byte |
| Status |
AC |
| Exec Time |
103 ms |
| Memory |
49568 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
400 / 400 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
01_sample.txt, 02_sample.txt, 03_sample.txt |
| All |
01_sample.txt, 02_sample.txt, 03_sample.txt, 04_11.txt, 05_44.txt, 06_44.txt, 07_44.txt, 08_44.txt, 09_44.txt, 10_44.txt, 11_44.txt, 12_28.txt, 13_28.txt, 14_28.txt, 15_28.txt, 16_28.txt, 17_28.txt, 18_28.txt, 19_116.txt, 20_116.txt, 21_116.txt, 22_115.txt, 23_115.txt, 24_35.txt, 25_35.txt, 26_35.txt, 27_35.txt, 28_35.txt, 29_35.txt, 30_35.txt, 31_35.txt, 32_33.txt, 33_33.txt, 34_33.txt, 35_1x.txt, 36_1x.txt, 37_1x.txt, 38_1x.txt, 39_1x.txt, 40_1x.txt, 41_1x.txt, 42_1x.txt, 43_small.txt, 44_small.txt, 45_small.txt, 46_small.txt, 47_small.txt, 48_small.txt, 49_small.txt, 50_small.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 01_sample.txt |
AC |
93 ms |
26272 KiB |
| 02_sample.txt |
AC |
86 ms |
26204 KiB |
| 03_sample.txt |
AC |
87 ms |
31084 KiB |
| 04_11.txt |
AC |
80 ms |
26236 KiB |
| 05_44.txt |
AC |
91 ms |
35256 KiB |
| 06_44.txt |
AC |
96 ms |
41988 KiB |
| 07_44.txt |
AC |
89 ms |
46492 KiB |
| 08_44.txt |
AC |
99 ms |
49052 KiB |
| 09_44.txt |
AC |
98 ms |
48036 KiB |
| 10_44.txt |
AC |
89 ms |
44768 KiB |
| 11_44.txt |
AC |
86 ms |
38892 KiB |
| 12_28.txt |
AC |
91 ms |
35180 KiB |
| 13_28.txt |
AC |
92 ms |
46716 KiB |
| 14_28.txt |
AC |
95 ms |
49568 KiB |
| 15_28.txt |
AC |
96 ms |
48036 KiB |
| 16_28.txt |
AC |
92 ms |
44768 KiB |
| 17_28.txt |
AC |
89 ms |
38828 KiB |
| 18_28.txt |
AC |
88 ms |
31116 KiB |
| 19_116.txt |
AC |
86 ms |
48140 KiB |
| 20_116.txt |
AC |
90 ms |
46568 KiB |
| 21_116.txt |
AC |
87 ms |
41948 KiB |
| 22_115.txt |
AC |
85 ms |
33676 KiB |
| 23_115.txt |
AC |
103 ms |
36964 KiB |
| 24_35.txt |
AC |
87 ms |
30668 KiB |
| 25_35.txt |
AC |
78 ms |
33572 KiB |
| 26_35.txt |
AC |
79 ms |
35828 KiB |
| 27_35.txt |
AC |
88 ms |
36812 KiB |
| 28_35.txt |
AC |
97 ms |
36748 KiB |
| 29_35.txt |
AC |
85 ms |
35724 KiB |
| 30_35.txt |
AC |
82 ms |
33728 KiB |
| 31_35.txt |
AC |
79 ms |
30696 KiB |
| 32_33.txt |
AC |
80 ms |
26276 KiB |
| 33_33.txt |
AC |
77 ms |
26536 KiB |
| 34_33.txt |
AC |
80 ms |
26436 KiB |
| 35_1x.txt |
AC |
83 ms |
31184 KiB |
| 36_1x.txt |
AC |
84 ms |
30732 KiB |
| 37_1x.txt |
AC |
81 ms |
26720 KiB |
| 38_1x.txt |
AC |
80 ms |
26536 KiB |
| 39_1x.txt |
AC |
77 ms |
26504 KiB |
| 40_1x.txt |
AC |
80 ms |
26112 KiB |
| 41_1x.txt |
AC |
83 ms |
30396 KiB |
| 42_1x.txt |
AC |
80 ms |
26224 KiB |
| 43_small.txt |
AC |
87 ms |
30964 KiB |
| 44_small.txt |
AC |
77 ms |
26208 KiB |
| 45_small.txt |
AC |
81 ms |
27132 KiB |
| 46_small.txt |
AC |
79 ms |
26672 KiB |
| 47_small.txt |
AC |
81 ms |
27036 KiB |
| 48_small.txt |
AC |
73 ms |
27268 KiB |
| 49_small.txt |
AC |
77 ms |
26556 KiB |
| 50_small.txt |
AC |
80 ms |
31192 KiB |