链接: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 ;
}