问题如下:
分析:
下面设定讨论的网格图为nm的规模。
格点正方形要求四个点都在格点上,先考虑正的正方形,正方形会有11,22,33…min(n,m) * min(n,m)的型号的正方形,那么这样的正方形分别是多少个呢?
对于每个型号的三角形内,又有如下图所示的正的斜的正方形。
你可以再多画几个,会发现,i*i的型号的正方形里包括的正的斜的正方形个数等于i个。因此我们可以得出这样的一个式子递推式:
下发附上AC代码一份:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int P = 1000000000+7;
ll ans;
int main(){
ll n,m;
scanf("%lld%lld",&n,&m);
for(ll i= 1;i<= min(n,m); i++){
ans = (ans +1ll * (n-i+1)*(m-i+1)*i%P ) % P;
}
cout << ans<< endl;
return 0;
}
学循环时可以拿来练手的题。