85pts求助
查看原帖
85pts求助
407417
HerikoDeltana楼主2021/3/28 15:45

RT,7,12,13 WA

#include <bits/stdc++.h>
#define Heriko return
#define Deltana 0
#define LL long long
#define R register
#define I inline
using namespace std;
LL n,a[1015][1015],num[1015],ans;
bool vis[1015][1015];
signed main()
{
	memset(vis,false,sizeof(vis));
	scanf("%lld",&n);
	for(R LL i=1;i<=n;i++)
		for(R LL j=1;j<=n;j++)
			scanf("%lld",&a[i][j]);
	for(R LL i=1;i<=n;i++)
	{
		if(i==1)
		{
			for(R LL j=1;j<=n;j++) num[i]+=a[j][j];
			continue;
		}
		else if(i==n)
		{
			for(R LL j=n;j>=1;j--) num[i]+=a[n-j+1][j];
			continue;
		}
		LL z=i-1;
		for(R LL j=i;j<=n;j++) num[i]=num[i]+a[j-z][j]+a[j][j-z];
		LL x=n+n-z;
		for(R LL j=n-1;j>x-n;j--) num[i]=num[i]+a[x-j][j]+a[n-(x-j)+1][n-j+1];
	}
	for(R LL i=1;i<=n;i++)
	{
		for(R LL j=i;j<=n;j++)
		{
			if(i!=j && !vis[i][j])
			{
				vis[i][j]=vis[j][i]=true;
				LL temp=num[i]+num[j];
				if(n<=2)
				{
					ans=max(temp,ans);
					continue;
				}
				if(n==3 && i==1 && j==n)
				{
					ans=max(temp-a[2][2],ans);
					continue;
				}
				if((i+j)%2==0)
				{
					LL x1=1+(abs(i-j))/2,y1=(i+j)/2;
					LL x2=n+1-x1,y2=n+1-y1;
					printf("(%lld,%lld) (%lld,%lld) (%lld,%lld) (%lld,%lld)\n",x1,y1,y1,x1,x2,y2,y2,x2);
					temp=temp-a[x1][y1]-a[x2][y2];
					if(x1!=y1) temp=temp-a[y1][x1];
					if(x2!=y2) temp=temp-a[y2][x2];
				}
				ans=max(temp,ans);
			}
		}
	}
	printf("%lld",ans);
	Heriko Deltana;
	

}


2021/3/28 15:45
加载中...