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;
    }
  • 相关阅读:
    NVIC
    ONE WIRE
    对话框
    STM32_USART
    [Java]eclipse的使用
    [转] Android资源管理框架(Asset Manager)简要介绍和学习计划
    [其他]网站收录
    [Java]Java简介
    [网络技术]网关 路由器 OSI
    [安卓]安卓模拟器(Android Emulator)
  • 原文地址:https://www.cnblogs.com/scau20110726/p/2909060.html
Copyright © 2011-2022 走看看