统计方形(数据加强版)
洛谷P2241 统计方形(数据加强版)
我的做法是在求矩形时(包括正方形),用的是长从1~m,宽从1~n枚举的,但是数学方法往往能起到四两拨千斤的效果,其实矩形的个数就是Cn+22 * Cm+22.因为确定一个矩形只需要确定它的两个端点就可以了,为啥要n+1,m+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; }