题解:P1861 星之器

· · 题解

题目大意

### 解题思路 定义势能函数 $f(i,j)=i^2+j^2+i+j$,则总势能 $E=\sum_{i,j} \text{星数}\times f(i,j)$。 可以证明:一次操作会减少 $2$ 倍魔力值的势能,即 $\Delta E = -2M$。因此总魔力为:$ans=\frac{E_{ini}-E_{fin}}{2}$。 直接计算初态与终态的势能差,除以 2 即可。 ### 复杂度分析 **时间复杂度**:$O(NM)$。 **空间复杂度**:$O(1)$。 ### 代码实现 ```cpp #include<bits/stdc++.h> using namespace std; int n,m; long long ans; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1,x;j<=m;j++) scanf("%d",&x), ans+=1ll*x*(i*i+j*j+i+j); for(int i=1;i<=n;i++) for(int j=1,x;j<=m;j++) scanf("%d",&x), ans-=1ll*x*(i*i+j*j+i+j); printf("%lld\n",ans/2); return 0; } ``` ![](https://cdn.luogu.com.cn/upload/image_hosting/zhgat07f.png)