[BZOJ2321,LuoguP1861]星(之)器

丧心病狂的神仙题

丧心病狂的神仙题

丧心病狂的神仙题

显然,不管你怎么移动,答案都是一定的

然后我们很快能联系到物理里面的能量守恒,于是自然地我们要给每个点搞一个势能出来

然后把势能的表达式写出来就可以做了呀

Tip:划掉的黑色字表示我根本不知道为什么

大佬们说势能的表达式是这样的

E=$\frac{x^2+y^2}{2}$

虽然我不知道是怎么出来的,但是怎么验证我倒是知道...如果有大佬知道怎么做可以评论给我吧

$E_{0}=\frac{{x0}^2+{y0}^2+{x1}^2+{y1}^2}{2}$

$E_{1}=\frac{{(x0-1)}^2+{y0}^2+{(x1+1)}^2+{y1}^2}{2}$

$\Delta{E}=x1-x0$

得证

然后贴个代码:

 

 1 #include<cstdio>
 2 #include<queue>
 3 #include<iostream>
 4 #include<cstring>
 5 #define int long long
 6 using namespace std;
 7 inline int read(){
 8     int ans=0,f=1;char chr=getchar();
 9     while(!isdigit(chr)){if(chr=='-') f=-1;chr=getchar();}
10     while(isdigit(chr)){ans=(ans<<3)+(ans<<1)+chr-48;chr=getchar();}
11     return ans*f;
12 }int n=read(),m=read(),a[1005][1005],ans;
13 signed main(){
14     for(int i=1;i<=n;i++)
15         for(int j=1;j<=m;j++) a[i][j]=read();
16     for(int i=1;i<=n;i++)
17         for(int j=1;j<=m;j++){
18             int x=read();
19             ans+=(a[i][j]-x)*(i*i+j*j);
20         }ans>>=1;cout<<ans;
21     return 0;
22 }

 

 

 

posted @ 2019-03-14 17:58  zheng_liwen  阅读(150)  评论(0编辑  收藏  举报
/*去广告*/