题目链接:https://www.nowcoder.com/acm/contest/142/F
题目大意:
n x m的格⼦子,选个p x q的,中⼼心重合,且上下左右对称
• 求(p, q)⽅方案数
• n, m <= 2000, n, m是偶数
题目思路:
如果给出的图是上下左右完全对称的话,对么他是(n/2-1)*(m/2-1)
接下考虑那些不对称的点,我们需要用p*q的水池将这些不对称的点全部覆盖住,那么我们现在只要求出中间水池至少需要覆盖长和宽,减去之后同完全对称计算即可。
#include<bits/stdc++.h>
using namespace std;
const int maxn=2100;
int n,m;
char s[maxn][maxn];
bool check(int x, int y) {
return s[x][y] == s[x][m - y - 1] && s[x][y] == s[n - x - 1][y] &&
s[x][y] == s[n - x - 1][m - y - 1];
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%s",s[i]);
}
int x=n/2-1,y=m/2-1;
for (int i = 0; i < n / 2; ++ i)
{
for (int j = 0; j < m/ 2; ++ j)
{
if (!check(i, j))
{
x = min(x, i), y = min(y, j);
}
}
}
printf("%d\n",x*y);
}
return 0;
}