题解:luoguP1861 星之器

时间:2024-04-07 15:07:06

为什么全世界都说这是个物理题,不应该是一个数学题吗,神犇的势能完全看不懂

我们直接来看题,对于一个点,在计算时候横坐标和纵坐标互不影响,所以我们分开考虑。

我们记两个点假如横坐标相同,分别记纵坐标为a,b
于是,收益就是$b-a-1$

然后用 当年写大视野鬼畜的思想 来化一下式子,我们可以得到

$$b-a-1=(2*b-2*a-2)/2$$

$$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=[a^2+b^2-(b-1)^2-(a+1)^2]/2$$

由于分开算非常不方便,我们取的又是最大值,所以,直接合起来计算

然后代码就是非常简单的了

势能是什么,能量守恒是什么

代码如下:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std; #define ll long long
#define re register
#define gc getchar()
inline int read()
{
re int x(0);re char ch(gc);
while(ch<'0'||ch>'9') ch=gc;
while(ch>='0'&&ch<='9') x=(x*10)+(ch^48),ch=gc;
return x;
} ll ans;
int n,m; int main()
{
freopen("casket.in","r",stdin);
freopen("casket.out","w",stdout);
n=read(); m=read();
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
ans+=(1LL*i*i+1ll*j*j)*read();
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
ans-=(1LL*i*i+1LL*j*j)*read();
cout<<(ans/2)<<endl;
return 0;
}

  

所以那些神仙题解的思路都是,先设出势能为$a(i,j)=i^2+j^2$ (怎么想的)

然后由于是末态减初态联想势能分析+能量守恒,然后就没了(黑人问号脸)