【洛谷】P2241 统计方形(数据加强版)——C++
s
本题,我们会用到一个求矩阵的公式 ,关于求正方形的个数,我们可以想向一下只有n=1,m=1的时候正方形为1,当n=2,m=2的时候小正方形增加4个,总共为5个,以此类推,我们可以发现s=1*1+2*2+......+min(n,m);可以自己去推理一下,同时我们要注意本题最后求出的结果较大,所以我们要用到long long形,连n,m也要注意用long long否则的话,与更广的表达式遇到之前可以会溢出,可以试一下。
代码:
#include<iostream>
using namespace std;
typedef long long ll;
int main(){ll n,m;cin>>n>>m;ll i;ll z=0,c=0;for(i=1;i<=min(n,m);i++){z+=(n-i+1)*(m-i+1);}c=(n*(n+1)*m*(m+1))/4-z;//减去正方形的个数cout<<z<<" "<<c;
}
上面的代码的下面的代码的简化版
#include<iostream>
using namespace std;
typedef long long ll;
int main(){ll n,m;cin>>n>>m;ll i,j;ll z=0,c=0;for(i=1;i<=n;i++){for(j=1;j<=m;j++){if(i==j)z+=(n-i+1)*(m-j+1);elsec+=(n-i+1)*(m-j+1);}}cout<<z<<" "<<c;
}