1 solutions

  • 0
    @ 2023-12-3 21:35:15

    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