题目:Codeforces 131C
地址:http://codeforces.com/problemset/problem/131/C
心得:
以前写组合数一般是先算出上下两项然后相除,但是这次算的时候越界了,WA了3次。。
#include <iostream>
typedef long long ll;
using namespace std;
ll c(ll a, ll b)
{
ll ans=1, i;
for(i=1;i<=b;i++)
{
ans*=a-i+1;//先乘一个
ans /=i;//后马上除一个, 除得净~
}
return ans;
}
int main()
{
ll n,b,g;
ll ans=0;
cin>>b>>g>> n;
for(ll i=4;i<n;i++)
{
ans+= c(b,i)*c(g, n-i);
}
cout<<ans <<endl;
}
附带一个防爆求平均数
#include <iostream>
typedef long long ll;
using namespace std;
int main()
{
int i;
double x, avg = 0;
for (i = 1; scanf("%lf", &x)==1; ++i)
avg += (x - avg) / i;
printf("%lf\n", avg);
}