摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 需要注意
Opposites Attract ★☆☆☆☆ 答案正确 100 2015-02-14 15:12:53

题意

每个人有个数值(-10 to 10),数值为相反数的人可以在一起,问能组成对数(每个人可以组成多对)。

题解

统计每个数字i对应的人的个数a_i,对于所有a_i>=2,计算: C_{a_i}^2*C_{a_{-i}}^2并求和。

数值为0的特判一下:C_{a_0}^4

代码

131B.cpp代码已折叠
展开折叠内容
#include<cstdio>
#include<iostream>
#include<cmath>
#include<iomanip>
#include<vector>
using namespace std;
#define si(n) scanf("%d",&n)
typedef unsigned long long ll;
#define ci const int&
ll c[100][100]={};
ll C(ci x,ci y)
{
    if(!x||!y||x==y)return 1;
    if(x<y)return 0;
    if(c[x][y])return c[x][y];
    return c[x][y]=C(x-1,y)+C(x-1,y-1);
}
int main()
{
    int b,g,k;
    scanf("%d%d%d",&b,&g,&k);
    if(b>=4&&g>=1&&k>=5)
        printf("%I64d",C(b+g,k)-C(b,k)-C(b,1)*C(g,k-1)-C(b,2)*C(g,k-2)-C(b,3)*C(g,k-3)-C(g,k));//fixed:漏了C(g,k)//
    else
        printf("0");
    return 0;
}

著作权声明[编辑]

关于[编辑]