标签:src ons 技术 tin 网格 color hid size 机器
1 #include<bits/stdc++.h> 2 #define mod 998244353 3 using namespace std; 4 const int N=110; 5 int n,m,mp[2][N][N],f[2][N][N],ans; 6 char s[N][N]; 7 void upd(int&x,int y){x+=y;if(x>=mod)x-=mod;} 8 int gcd(int a,int b){return !b?a:gcd(b,a%b);} 9 int main(){ 10 #ifndef ONLINE_JUDGE 11 freopen("T2.in","r",stdin); 12 freopen("T2.out","w",stdout); 13 #endif 14 int T;scanf("%d",&T); 15 while(T--){ 16 ans=0; 17 scanf("%d%d",&n,&m); 18 for(int i=1;i<=n;++i)scanf("%s",s[i]+1); 19 for(int i=1;i<=n<<1;++i) 20 for(int j=1;j<=m<<1;++j)s[i][j]=s[(i-1)%n+1][(j-1)%m+1]; 21 int d=gcd(n,m),cur=0; 22 for(int dx=0,dy;dx<=d;++dx){ 23 dy=d-dx; 24 if(gcd(dx,n)!=1||gcd(dy,m)!=1)continue; 25 26 for(int i=1;i<=dx+1;++i) 27 for(int j=1;j<=dy+1;++j) 28 mp[0][i][j]=mp[1][i][j]=0; 29 30 for(int l=1,ax=1,ay=1;l<=n*m/d;++l){ 31 32 cur^=1; 33 34 for(int i=1;i<=dx+1;++i) 35 for(int j=1;j<=dy+1;++j) 36 mp[cur][i][j]=mp[cur^1][i][j]|(s[ax+i-1][ay+j-1]-‘0‘); 37 38 for(int i=1;i<=dx+1;++i) 39 for(int j=1;j<=dy+1;++j)f[0][i][j]=f[1][i][j]=0; 40 41 if(!mp[cur][1][1]){ 42 f[cur][1][1]=1; 43 for(int i=1;i<=dx+1;++i) 44 for(int j=1;j<=dy+1;++j){ 45 if(i!=dx+1&&!mp[cur][i+1][j])upd(f[cur][i+1][j],f[cur][i][j]); 46 if(j!=dy+1&&!mp[cur][i][j+1])upd(f[cur][i][j+1],f[cur][i][j]); 47 } 48 } 49 50 if(!mp[cur^1][dx+1][dy+1]){ 51 f[cur^1][dx+1][dy+1]=1; 52 for(int i=dx+1;i;--i) 53 for(int j=dy+1;j;--j){ 54 if(i!=1&&!mp[cur^1][i-1][j])upd(f[cur^1][i-1][j],f[cur^1][i][j]); 55 if(j!=1&&!mp[cur^1][i][j-1])upd(f[cur^1][i][j-1],f[cur^1][i][j]); 56 } 57 } 58 59 for(int i=1;i<=dx+1;++i) 60 for(int j=1;j<=dy+1;++j)if(mp[cur][i][j]){ 61 int x=0; 62 if(i!=1)upd(x,f[cur][i-1][j]); 63 if(j!=1)upd(x,f[cur][i][j-1]); 64 int y = f[cur^1][i][j]; 65 upd(ans, 1ll*((l-1)*d+i+j-2)*x%mod*y%mod); 66 } 67 68 ax=(ax+dx-1)%n+1,ay=(ay+dy-1)%m+1; 69 70 } 71 } 72 printf("%d\n",ans); 73 } 74 return 0; 75 }
标签:src ons 技术 tin 网格 color hid size 机器
原文地址:https://www.cnblogs.com/Paul-Guderian/p/10410347.html