统计方形(数据加强版)

洛谷P2241 统计方形(数据加强版)

我的做法是在求矩形时(包括正方形),用的是长从1~m,宽从1~n枚举的,但是数学方法往往能起到四两拨千斤的效果,其实矩形的个数就是Cn+22  *  Cm+22.因为确定一个矩形只需要确定它的两个端点就可以了,为啥要n+1m+1呢?因为矩形边长可以为1,就是另一个点选空。若只求长方形,用容斥原理即可。

#include<bits/stdc++.h>
using namespace std;
unsigned long long n,m;
unsigned long long zf,cf;
int main()
{
    cin>>n>>m;
  unsigned   long long l=n,k=m;
  while(l>=1&&k>=1)
  {
      zf+=l*k;
      l--;
      k--;
  }
  l=n,k=m;
  while(l>=1)
  {
      while(k>=1)
      {
          cf+=l*k;
          k--;
    }
    k=m;
    l--;  
  }
  cout<<zf<<' '<<cf-zf;
return 0;
}
原文地址:https://www.cnblogs.com/war1111/p/7416354.html