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
AC × 3
AC × 50
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