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\n",ans/2);
}
posted @ 2019-01-13 12:57  风浔凌  阅读(110)  评论(0编辑  收藏  举报