1 solutions
-
0
C++ :
#include <bits/stdc++.h> using namespace std; const int N = 1 << 26; int n, m, t, vis[N]; /*int dir[8][2]={-1,-1,-1,1,-1,0,1,-1,1,0,1,1,0,1,0,-1}; inline bool chk(int x,int y){return x>=0&&y>=0&&x<n&&y<m;} int dfs(int x) { if(~vis[x])return vis[x]; vis[x]=1;int t=0; for(int i=0;i<n;i++)for(int j=0;j<m;j++) if(x>>(i*m+j)&1) { int cnt=0;for(int k=0,xx,yy;k<8;k++)if(chk(xx=i+dir[k][0],yy=j+dir[k][1]))cnt+=x>>(xx*m+yy)&1; if(cnt==2||cnt==3)t|=1<<(i*m+j); } else { int cnt=0;for(int k=0,xx,yy;k<8;k++)if(chk(xx=i+dir[k][0],yy=j+dir[k][1]))cnt+=x>>(xx*m+yy)&1; if(cnt==3)t|=1<<(i*m+j); } if(!t)return vis[x]=0;else return vis[x]=dfs(t); }*/ int main() { int a[5][5] = { 0, 0, 0, 0, 0, 0, 5, 18, 73, 267, 0, 18, 150, 1533, 11398, 0, 73, 1533, 31828, 469972, 0, 267, 11398, 469972, 12785753 }; scanf("%d", &t); for (int i = 1; i <= t; i++) scanf("%d%d", &n, &m), printf("%d\n", a[n - 1][m - 1]); /* for(int i=2;i<=5;i++)for(int j=1;j<=5;j++) { n=i;m=j;int ans=0;memset(vis,-1,sizeof(vis));vis[0]=0; for(int k=0;k<(1<<(i*j));ans+=vis[k],k++)if(vis[k]==-1)dfs(k); printf("%d\n",ans); }*/ return 0; }
- 1
Information
- ID
- 1314
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By