BJ2011集训/BZOJ2321 星器

时间:2022-04-06 09:23:04

对于一行上的两个星星,假设它们的坐标为\(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);
}