codeforces1453C

大神代码以及思路
总体思路就是保存每个数字的最小坐标和最大坐标,然后分类讨论,题意就不写了。大概意思就是怎末只改一个数字,让该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();
	}
}

猜你喜欢

转载自blog.csdn.net/qq_46264636/article/details/110850179