为啥方案数会是127?
查看原帖
为啥方案数会是127?
783555
ZeroCore楼主2022/10/28 19:11
#include<iostream>
#include<cstdio>
#include<utility>
using namespace std;
typedef pair<int,int> zb;
const int MAX=129;
int d,n,x,y,k,a[MAX][MAX];
int maxnum,t,cnt;
zb tt[MAX];

void print();

int main()
{
	freopen("temp.out","w",stdout);
	//读数据 
	cin>>d>>n;
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d%d",&x,&y,&k);
		a[x][y]=k;
	}
	//print();cout<<endl;
	//求前缀和 
	for(int i=1;i<MAX;i++) a[0][i]+=a[0][i-1];
	for(int i=1;i<MAX;i++) a[i][0]+=a[i-1][0];
	for(int i=1;i<MAX;i++)
	{
		for(int j=1;j<MAX;j++)
		{
			a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
		}
	}
	//print();cout<<endl;
	//计算最大 
	for(int i=MAX-1-d;i>=d;i--)
	{
		for(int j=MAX-1-d;j>=d;j--)
		{
			t=a[i+d][i+d]-a[i-d-1][i+d]-a[i+d][i-d-1]+a[i-d-1][i-d-1];//计算poi=(i,j)时的场所数
			if(t>maxnum)
			{
				//printf("Because %d>%d,a[%d][%d] is the most max one. cnt is set to 1.\n",t,maxnum,i,j);
				maxnum=t;
				cnt=1;
			}
			else if(t==maxnum&&maxnum!=0)
			{
				cnt++;
				tt[cnt]=zb(i,j);
				//printf("Because %d=%d,a[%d][%d] is the most max one too.cnt=%d\n",t,maxnum,i,j,cnt);
			}
		}
	}
	//for(int i=1;i<=cnt;i++) cout<<tt[i].first<<' '<<tt[i].second<<endl;
	//cout<<endl;
	
	
	cout<<cnt<<' '<<maxnum;
	
	
	return 0;
}

void print()
{
	for(int i=0;i<=MAX;i++)
	{
		cout.width(5);cout<<i;
	}
	cout<<endl;
	for(int i=1;i<=MAX;i++)
	{
		cout.width(5);cout<<i;
		for(int j=1;j<=MAX;j++)
		{
			cout.width(5);
			cout<<a[i][j];
		}
		cout<<endl;
	}	
}
2022/10/28 19:11
加载中...