矩形A + B HDU-2523 【排列组合】

来源:互联网 发布:对象数组的地址 编辑:程序博客网 时间:2024/06/07 01:11

题意:给你一个n*m的矩形,以单位长度划分成n*m个正方形,问其中一共有几个矩阵。

思路:对于仅有一行的来说共有(1+m)*m/2个矩形。对于1列来说,共有(n+1)*n/2个矩形,答案就是两个乘一下。

// 这道题,高中数学老师曾经和我说过。然而我已经不会了。典型的排列组合体

#include <bits/stdc++.h>using namespace std;int main(void){    int t;    cin >>t;    while(t--)    {        int n,m;        cin >> n>>m;        printf("%I64d\n",1LL*(n*n+n)*m*(m+1)/4   );    }}

代码2: 学到了很多东西:
1.求组合数分子可以整除分母,而且有好处。
2.组合计算。 两条横线,两条竖线,构成一个

#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<cstring>using namespace std;typedef long long ll;ll C(ll a,ll b)//求组合数C(a,b){        if(a>b-a)                a=b-a;        ll k;        ll fz=1;        for(int i=b,k=1;k<=a;k++,i--)                fz*=1.0*i/k;        return fz;}int main(){        int t;        cin>>t;        ll a,b;        while(t--)        {                cin>>a>>b;                if(a==0 || b==0)                    {                    printf("0\n");                    continue;                }                //a+1个顶点中挑2个顶点                cout<<(ll)(C(2,a+1)*C(2,b+1))<<endl;        }        return 0;}

感谢JACK让我又懂了一点知识!