主题说明
出了纳米网格,一些网格不能铺纱,其他网格必须铺纱,形成闭合回路。 有几种铺法?
第一行,n,m2=n,m=12 ) )。
4 4
*…
2
4 4
6
# include cstdio # include iostream # include cstring # include string # include cmath # include algorithm # include iterator # include include include map # includeset # definelllonglong # definemo 590027 usingnamespacestd; int n,m,mapx[20][20]={0},endx,endy; ll all_ans=0,dp[2][600000]={0}; int bits[28]={0}; int state[2][600000]={0},tots[2]={0}; int pre=1,cnt=0; struct hash_table{ int pre,to; }idx[600000]={0}; int ptr[600000]={0},at=0; inlinevoidreadxintx ) x=0; int k=1; 注册器char ch=0; wilech0)|ch 9) ) { ch=getchar ); ifch==’-‘ ) k=-1; }whilech=’0’ch=’9’ ) {x=x*10 ch-‘0); ch=getchar ; } x*=k; }在线语音读取) readx ) ) n; readxm char cht=0; forintI=1; i=n; I ) forintj=1; j=m; j ) { cht=0; 威尔cht!=’.’ cht! 浅白的皮虾) cht=getchar ) ); ifcht==’.’ ) { mapx[i][j]=1; endx=i; endy=j; } }}inline void init_bits ) for ) intI=1; i=25; I ) bits[I]=I1 ); }inlinevoidhahintsta,ll val ) { int key=sta%mo; forintprex=ptr[key]; prex; prex=idx [ prex ].pre ] if [ state [ CNT ] [ idx [ prex ].to ]==sta ] { DP [ CNT ] [ idx [ prex ].to迷人的糖豆=val; 返回; tots ) CNT魅力糖豆; state[cnt][tots[cnt]]=sta; dp[cnt][tots[cnt]]=val; idx[ at].pre=ptr[key]; idx[at].to=tots[cnt]; ptr[key]=at; }inline void DP ) { tots[cnt]=1; dp[cnt][1]=1; state[cnt][1]=0; forintI=1; i=n; I ) forintj=1; j=tots[cnt]; j ) state[cnt][j]=2; forintj=1; j=m; j ) { at=0; 短信ptr,0,sizeof ptr ); SWAPpre,cnt ); tots[cnt]=0; register int nowsta,is_d,is_r; 注册者LL Nowans; forintk=1; k=tots[pre]; k{nowsta=state[pre][k],nowans=dp[pre][k]; is_d=Nowstabits[j] ) 4,is _ r=nowstabits [ j-1 ] ) 4; if ! mapx[I][j]}{if ! is_d )! is_r ) ) hah 新sta,新nowans ); } else if ! is_d )! is_r ) if ) mapx[I1][j]mapx[I][j1] ) hah ) nowsta1bitsj-1 ) )1bits[j] ),nowans ); } else if ! is_dis_r ) ) if ) mapx[I1][j] ) hah ) nowsta,nowans ); ifMapX[I][j1] ) hah ) nowsta-is_r* )1bits[j-1] ) is_r* )1bits[j],nowans ); }elseifis_d ! is_r ) ) if ) MapX[I][j1] ) hah ) Nowsta,nowans ); ifMapX[I1][j] ) hah ) nowsta-is_d* )1bits[j] ) is_d*1bits[j-1] ),nowans ); }elseifis_d==1is_r==1) { register int count=1; forintL=j1; l=m; l ) if ) ) Nowstabits[L] ) %4==1) count; elseif ) Nowstabits[L] ) %4==2) count–; if ! count ) hah ) nowsta-1bits[L]-)1bits [ j ]-1bits [ j-1 ],nowans ); 布雷克; }}elseifis_d==2is_r==2) { register int count=1; forintL=j-2; l=0; L–}{if ) Nowstabits[L] ) %4==1) count–; elseif ) Nowstabits[L] ) %4==2) count; if ! count ) hah ) nowsta-2* )1bits[j]-2* )1bits[j-1] )1bits[l],nowans ); 布雷克; }}elseifis_d==1is_r==2) hah ) nowsta-2* )1bits[j-1] )-1bits[j],nowans ); elseifis_r==1is_d==2) if ) I==endxj==endy ) all_ans=ll ) nowans; } } }}int main ) ) { readit ); init_bits ; DP ; printf’%lld\n ‘,all_ans ); 返回0; }