小A买彩票-(组合数)

时间:2023-03-09 04:52:02
小A买彩票-(组合数)

链接:https://ac.nowcoder.com/acm/contest/549/C
来源:牛客网

题目描述

小A最近开始沉迷买彩票,并且希望能够通过买彩票发家致富。已知购买一张彩票需要3元,而彩票中奖的金额分别为1,2,3,4元,并且比较独特的是这个彩票中奖的各种金额都是等可能的。现在小A连续购买了n张彩票,他希望你能够告诉他至少能够不亏本的概率是多少。

输入描述:

一行一个整数N,为小A购买的彩票数量一行一个整数N,为小A购买的彩票数量

输出描述:

输出一个最简分数a/b,表示小A不亏本的概率。若概率为1,则输出1/1,概率为0,则输出0/1。输出一个最简分数a/b,表示小A不亏本的概率。若概率为1,则输出1/1,概率为0,则输出0/1。
示例1

输入

2

输出

3/8

备注:

0≤n≤30
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#include<queue>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std; ll C[][];
ll n,minn,maxx; void init()
{
memset(C,,sizeof(C));
for(int i=;i<=;i++)
C[i][]=;
for(int i=;i<=;i++)
for(int j=;j<=i;j++)
C[i][j]=C[i-][j-]+C[i-][j];
} ll gcd(ll a,ll b)
{
if(b==)
return a;
return gcd(b,a%b);
} int main()
{
init();
while(scanf("%lld",&n)!=EOF)
{
minn=*n;
maxx=*n;
ll ans=;
for(ll k=minn;k<=maxx;k++)
{
for(ll a=;a<=n;a++)
for(ll b=;b<=n;b++)
for(ll c=;c<=n;c++)
for(ll d=;d<=n;d++)
{
if(a+*b+*c+*d==k && a+b+c+d==n)
{
ans+=C[n][a] * C[n-a][b] * C[n-a-b][c] * C[n-a-b-c][d];
}
}
}
ll sum=;
for(int i=;i<=n;i++)
sum=sum*;
int g=gcd(sum,ans);
printf("%lld/%lld\n",ans/g,sum/g);
}
return ;
}