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);
}

猜你喜欢

转载自www.cnblogs.com/fengxunling/p/10262333.html