比赛 202103省实验桐柏一中普及组联赛 评测结果 WWWWWWWWWW
题目名称 亡羊补牢,未为迟也 最终得分 0
用户昵称 该账号已注销 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2021-03-22 20:57:33
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,tx[10]={0,-2,-1,1,2,2,1,-1,-2},ty[10]={0,1,2,2,1,-1,-2,-2,-1},a[20][20]={0},ans[20]={0};
int dfs(int x,int y,int u)
{
    bool p=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(a[i][j]==0){
                p=1;
                break;
            }
        }
    }
    if(p==0){
        ans[u]++;
        return 0;
    }
    if(x+1<=n)
    {
        for(int i=1;i<=8;i++)
        if(x+1+tx[i]<=n&&y+ty[i]<=n&&x+1+tx[i]>0&&y+ty[i]>0){
        a[x+1+tx[i]][y+ty[i]]=1;
        dfs(x+2,y,u+1);
        for(int i=1;i<=8;i++)
        if(x+1+tx[i]<=n&&y+ty[i]<=n&&x+1+tx[i]>0&&y+ty[i]>0){
        a[x+1+tx[i]][y+ty[i]]=0;
    }
    if(x+1>n)
    if(y+1<=m)
    {
        for(int i=1;i<=8;i++)
        if(x+tx[i]<=n&&y+1+ty[i]<=n&&x+tx[i]>0&&y+1+ty[i]>0){
        a[x+tx[i]][y+1+ty[i]]=1;
        dfs(0,y+2,u+1);
        for(int i=1;i<=8;i++)
        if(x+tx[i]<=n&&y+1+ty[i]<=n&&x+tx[i]>0&&y+1+ty[i]>0){
        a[x+tx[i]][y+1+ty[i]]=0;
    }
}
}
}}
}
int main(){
    freopen("secretnum.in","r",stdin);
    freopen("secretnum.out","w",stdout);
    cin>>n>>m;
    dfs(0,0,1);
    for(int i=1;i<=20;i++)
    {
        if(ans[i]!=0)
        {
            cout<<i<<' '<<ans[i]<<endl;
        }
    }
    return 0;
}