问题如下:
Yali_ hn1021T2统计正方形
分析:
  下面设定讨论的网格图为nm的规模。
  格点正方形要求四个点都在格点上,先考虑正的正方形,正方形会有1
1,22,33…min(n,m) * min(n,m)的型号的正方形,那么这样的正方形分别是多少个呢?
Yali_ hn1021T2统计正方形
  对于每个型号的三角形内,又有如下图所示的正的斜的正方形。
Yali_ hn1021T2统计正方形
  你可以再多画几个,会发现,i*i的型号的正方形里包括的正的斜的正方形个数等于i个。因此我们可以得出这样的一个式子递推式:
Yali_ hn1021T2统计正方形
下发附上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;
}

学循环时可以拿来练手的题。

相关文章: