BJ2011集训/BZOJ2321 星器

对于一行上的两个星星,假设它们的坐标为(x1,x2)
(x1->x1+1)
(x2->x2-1)
((x1+1)^2=x1^2+1+2*x1)
((x2-1)^2=x2^2+1-2*x2)
变化量=2*(x2-x1+1)=2乘一次释放的能量
考虑是二维的,所以我们定义一个星星的能量为(x^2+y^2),算出来初始局面的能量和,和终结局面的能量和,做差/2即是答案。

代码如下:

#include<iostream>
#include<cstring>
#include<cstdio>
#define MAXN 300
using namespace std;
int n,m;
int k[MAXN][MAXN];
long long ans;
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			scanf("%d",&k[i][j]);
			ans+=1ll*k[i][j]*i*i+1ll*k[i][j]*j*j;
		}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			scanf("%d",&k[i][j]);
			ans-=1ll*k[i][j]*i*i+1ll*k[i][j]*j*j;
		}
	printf("%lld
",ans/2);
}
原文地址:https://www.cnblogs.com/fengxunling/p/10262333.html