TopCoder SRM 377 Div1 Easy SquaresInsideLattice
問題
(0,0)から(width,height)の格子点を結んでできる正方形はいくつあるか。
辺が軸に平行である必要はない。
制約条件
width,height≦10^5
方針
一辺の長さがLの軸に平行な正方形にぴったり内接する(軸が平行とは限らない)正方形は、
L個ある。
これが、平行移動の仕方が(width-L+1)*(height-L+1)通りある。
これをL=1〜min(width,height)まで足し合わせればよい。
ソースコード
class SquaresInsideLattice { public: long long howMany(int width, int height) { ll ans=0; for(int i=1;i<=min(width,height);i++) ans+=(ll)i*(width-i+1)*(height-i+1); return ans; } };