zoukankan      html  css  js  c++  java
  • uva 10277 Boastin' Red Socks

    概率题

    给你p和q,表示概率p/q,当有n个红袜子,m个黑袜子时,取两次,两次都是红袜子的概率为p/q,输出n和m,如果不可能则输出impossible

    设总袜子数为b,红袜子数为a,则a/b*(a-1)/(b-1)=p/q , 可见分子p是a*(a-1)的形式,分母q也是这种形式

    所以我们用暴力来枚举i*(i-1)分母,并且当分子也能写成j*(j+1)的形式时就找到了解

    其实这题意义不大也不是什么经典题,能AC也就行了不必太抠

    #include <cstdio>
    #include <cmath>
    
    long long gcd(long long a , long long b)
    { return b==0 ? a : gcd(b,a%b); }
    
    int main()
    {
        long long p,q;
        while(scanf("%lld%lld",&p,&q))
        {
           if(!p && !q) break;
           if(p==q)  //概率为1
           { printf("2 0\n"); continue;}
           if(p==0)  //概率为0
           { printf("0 2\n"); continue;}
           long long g=gcd(p,q);
           p/=g; q/=g;
           long long i,j;
           for(i=2; i<=50000; i++)
               if(i*(i-1)%q==0)
               {
                    long long n=i*(i-1)/q;
                    long long m=n*p;
                    j=(long long)sqrt(m+0.5);
                    if(j*(j+1)==m && j+1>=2)
                        break;
               }
            if(i>50000) printf("impossible\n");
            else        printf("%lld %lld\n",j+1,i-j-1);
        }
        return 0;
    }
  • 相关阅读:
    221. 最大正方形
    9. 回文数
    2. 两数相加
    1. 两数之和
    HDU 1864 最大报销额
    47 java包打成本地maven
    46 数组中的元素进行位置交换
    5 docker安装kibana
    45 vue图片放大预览
    4 docker中安装es
  • 原文地址:https://www.cnblogs.com/scau20110726/p/2909060.html
Copyright © 2011-2022 走看看