大神代码以及思路
总体思路就是保存每个数字的最小坐标和最大坐标,然后分类讨论,题意就不写了。大概意思就是怎末只改一个数字,让该0~9的围成的三角形面积最大。个人觉得不配1700,虽然我没想出来,但是我菜呀。。
自己的代码
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
#define ll long long
const int maxn = 2e3 + 10;
string a[maxn];
int l, n, m;
int ans[12];
int mx[12];
int mix[12];
int my[12];
int miy[12];
void solve()
{
int n;
cin >> n;
for(int i=0;i<=9;i++)
{
mix[i]=miy[i]=n;
mx[i]=my[i]=0;
ans[i]=0;
}
for (int i = 1; i <= n; i++)
{
cin>>a[i];
for (int j = 0; j < n; j++)
{
int d=a[i][j]-'0';
mx[d]=max(i,mx[d]);
mix[d]=min(mix[d],i);
my[d]=max(j+1,my[d]);
miy[d]=min(j+1,miy[d]);
}
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<n;j++)
{
int d=a[i][j]-'0';
ans[d]=max(ans[d],max(j,n-j-1)*max(i-mix[d],mx[d]-i));
ans[d]=max(ans[d],max(i-1,n-i)*max(j+1-miy[d],my[d]-j-1));
}
}
for(int i=0;i<=9;i++)
{
cout<<ans[i]<<" ";
}
cout<<endl;
}
int main()
{
ios::sync_with_stdio(false);
int t;
cin >> t;
while (t--)
{
solve();
}
}