zoukankan      html  css  js  c++  java
  • 「SHOI2002」「LuoguP1291」百事世界杯之旅(UVA10288 Coupons)(期望,输出

    题目描述

    “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字。只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯。还不赶快行动!”

    你关上电视,心想:假设有n个不同的球星名字,每个名字出现的概率相同,平均需要买几瓶饮料才能凑齐所有的名字呢?

    输入输出格式

    输入格式:

    整数n(2≤n≤33),表示不同球星名字的个数。

    输出格式:

    输出凑齐所有的名字平均需要买的饮料瓶数。如果是一个整数,则直接输出,否则应该直接按照分数格式输出,例如五又二十分之三应该输出为(复制到记事本): 5 frac{3}{20}5203 第一行是分数部分的分子,第二行首先是整数部分,然后是由减号组成的分数线,第三行是分母。减号的个数应等于分母的为数。分子和分母的首位都与第一个减号对齐。

    分数必须是不可约的。

    输入输出样例

    输入样例#1: 复制
    2
    
    输出样例#1: 复制
    3

    题解

    难点大概是输出?

    首先考虑一下抛开狗血输出怎么写吧。

    设$f[n,k]$为在$n$个里面抽中了$k$个的期望购买量。

    那么在手上有$(k-1)$个时,

    那么$f[n,k]=f[n][k-1]+frac{n}{n-k}$(抽中概率为$frac{n-k}[n]$,期望为$1/p$)

    所以递推就行了。

    输出嘛,瞎几巴搞搞,问题也不大。

    就是要注意UVA的输出比SHOI多了个空格QAQ肽毒了

     1 /*
     2 qwerta 
     3 P1291 [SHOI2002]百事世界杯之旅 Accepted 
     4 100
     5 代码 C++,0.67KB
     6 提交时间 2018-11-04 17:04:33
     7 耗时/内存 30ms, 684KB
     8 */
     9 #include<iostream>
    10 #include<cstdio>
    11 #include<cmath>
    12 using namespace std;
    13 #define LL long long
    14 LL fz[37];
    15 LL fm[37];
    16 int main()
    17 {
    18     int n;
    19     scanf("%d",&n);
    20     fm[0]=1;
    21     for(int k=1;k<=n;++k)
    22     {
    23         //f[n][k]=f[n][k-1]+n/(n-k+1);
    24         fm[k]=fm[k-1]*(n-k+1);
    25         fz[k]=fz[k-1]*(n-k+1)+fm[k-1]*n;
    26         for(int j=2;j<=1e3;++j)
    27         {
    28             while(fm[k]%j==0&&fz[k]%j==0)
    29             {
    30                 fm[k]/=j;
    31                 fz[k]/=j;
    32             }
    33         }
    34     }
    35     if(fz[n]%fm[n]==0){cout<<fz[n]/fm[n];return 0;}
    36     int z=fz[n]/fm[n];
    37     fz[n]%=fm[n];
    38     for(int i=0;i<=log10(z);++i)
    39     cout<<" ";
    40     cout<<fz[n];
    41     cout<<endl;
    42     cout<<z;
    43     for(int i=0;i<=log10(fm[n]);++i)
    44     cout<<"-";
    45     cout<<endl;
    46     for(int i=0;i<=log10(z);++i)
    47     cout<<" ";
    48     cout<<fm[n];
    49     return 0;
    50 }
  • 相关阅读:
    【题解】洛谷 P3942 将军令【20201017 CSP 模拟赛】【贪心】
    ASP.NET上传文件的三种基本方法
    Android 最火的快速开发框架XUtils
    asp.net 上传文件到一般处理程序中
    Android版本:使用findViewById()用字符串/在一个循环
    android 调用系统图库查看指定路径的图片
    Android中实现日期时间选择器(DatePicker和TimePicker)
    Android自定义ListView的Item无法响应OnItemClick的解决办法
    Android开发配置,消除SDK更新时的“https://dl-ssl.google.com refused”异常
    mysql 修改密码
  • 原文地址:https://www.cnblogs.com/qwerta/p/9905473.html
Copyright © 2011-2022 走看看