[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 }