比赛 202103省实验桐柏一中普及组联赛 评测结果 WWWWWWWWWW
题目名称 亡羊补牢,未为迟也 最终得分 0
用户昵称 lyxleo 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2021-03-22 19:12:46
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int n,m;
bool vis[25][25];//表示当前位置有没有被占用 
int tot;
int minn=1e9;
int num;
inline void change(long long x,long long y){
	const long long dx[8]={-2,-2,-1,1,2,2,1,-1};
	const long long dy[8]={-1,1,2,2,1,-1,-2,-2};
	for(int d=0;d<8;++d){
		if(x+dx[d] >=1&&x+dx[d]<=n&&y+dy[d]>=1&&y+dy[d]<=n){
			vis[x+dx[d]][y+dy[d]]=1;
		}
	}
}
void dfs(int x,int y){
	vis[x][y] = 1;
	bool have = false;
	change(x,y);
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			if(!vis[i][j]){
				have=true;
				++tot;
				dfs(i,j);
			}
		}
	}
	if(!have){
		return;
	}
}
int main(){
	freopen("secretnum.in","r",stdin);
	freopen("secretnum.out","w",stdout);
	scanf("%lld %lld",&n,&m);
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			for(int p=1;p<=n;++p){
				for(int q=1;q<=m;++q){
					vis[p][q] = 0;
				}
			}
			tot=1;
			dfs(i,j);
			if(tot == minn){
				++num;
			}
			if(tot < minn){
				minn = tot;
				num = 1;
			}
		}
	}
	printf("%d %d",minn,num);
	return 0;
}