zoukankan      html  css  js  c++  java
  • Luogu P1291 [SHOI2002]百事世界杯之旅 // 易错的期望

    首先有一个式子是错的

    网上有个式子是f[i] = i/n * f[i] + n-i/n * f[i-1] + 1.f[i]表示现在拿到了几个明星

    这个A了但是是错的。因为只要买除i-1以外的任意一个就行,所以后面的应该是frac{n-(i-1)}{n}f[i-1]

    BTC大神通过倒推写出了一个正确的式子,luogu上ButterflyDew的题解也不错。

    美妙输出。

    #include<bits/stdc++.h>
    
    using namespace std ;
    
    long long n,a,b;
    
    long long gcd(long long a,long long b){
        return b ?  gcd(b,a%b) : a;
    } 
    
    int main(){
        scanf("%lld",&n);
        b=1;
        for(int i=1;i<=n;i++){
            b = b * i / gcd (b,i);
        }
        for(int i=1;i<=n;i++){
            a += b / i;
        }
        a *= n;
    //    cout<<a<<endl<<b<<endl;
        long long p = a/b;
        a %= b;
        if(a==0){
            printf("%lld
    ",p);
            return 0;
        }
        long long ya = a;
        a/=gcd(a,b);
        b/=gcd(ya,b);
    //    cout<<p<<endl<<a<<endl<<b<<endl;
        long long len1=0,len2=0,sb = b,sp = p;
        while(sp){
            ++len1;
            sp/=10;
        }
        while(sb){
            ++len2;
            sb/=10;
        }
    //    cout<<len1<<endl<<len2;
        for(int i=1;i<=len1;i++){
            printf(" ");
        }
        printf("%lld",a);
        printf("
    ");
        if(p!=0) printf("%lld",p);
        for(int i=1;i<=len2;i++){
            printf("-");
        }
        printf("
    ");
        for(int i=1;i<=len1;i++){
            printf(" ");
        }
        printf("%lld",b);
        return 0;
    }

    TAG : SIN_XIII ⑨

  • 相关阅读:
    平均要取多少个(0,1)中的随机数才能让和超过1
    perl学习笔记
    K-means
    Mysql数据库常用操作整理
    ETL模型设计
    c++ 面试整理
    vim display line number
    inux 下的/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc 文件的作用
    Linux命令大总结
    perl learning
  • 原文地址:https://www.cnblogs.com/SINXIII/p/10999041.html
Copyright © 2011-2022 走看看