天天看點

題解:luoguP1861 星之器

為什麼全世界都說這是個實體題,不應該是一個數學題嗎,神犇的勢能完全看不懂

我們直接來看題,對于一個點,在計算時候橫坐标和縱坐标互不影響,是以我們分開考慮。

我們記兩個點假如橫坐标相同,分别記縱坐标為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$ (怎麼想的)

然後由于是末态減初态聯想勢能分析+能量守恒,然後就沒了(黑人問号臉)

轉載于:https://www.cnblogs.com/zijinjun/p/10648528.html