jzoj 1359. 【2011.12普及模拟】数三角

发布于 2019-03-25  22 次阅读


题目描述

小Z无聊时,想了个问题。由许多边长为1的小正方形,构成了一个n×m的长方形网格。在每个小正方形中,添一条斜线,从右上顶点连到左下顶点,构成了一个新图形,并且包含了许多三角形。小Z打算数清总共有多少三角形,可不一会儿就眼花了,你能帮他吗?

输入

一行,两个整数n和m,表示长方形的长和宽。

输出

一行,一个整数,表示三角形的个数。

思路

这个长方形可以看成很多个小正方形,然后每一个正方形有两个三角形
于是这题就变成了求正方形的数量,(n-i+1)*(m-i+1)就是边长为i的正方形的个数、

var
  i,j,k,n,m,q,p:longint;
  s:int64;
function min(x,y:longint):longint;
begin
  if x<=y then exit(x)
    else exit(y);
end;

begin
  assign(input,'triangle.in'); reset(input);
  assign(output,'triangle.out'); rewrite(output);
  readln(n,m);
  for i:=1 to min(n,m) do
    begin
      q:=n-i+1;
      p:=m-i+1;
      s:=s+q*p*2
    end;
  writeln(s);
end.
]]>