UVA10375选择与除法

Posted nsd-email0820

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA10375选择与除法相关的知识,希望对你有一定的参考价值。

题意

英文题真的杀千刀

真不好意思说我是某知名外国语学校的毕业生

已知C(m,n)=m! / (n!*(m-n!)),输入整数p,q,r,s(p>=q,r>=s,p,q,r,s<=10000),计算C(p,q)/C(r,s)。输出保证不超过10^8,保留5位小数

分析

网上怎么全是唯一分解定理?阶乘不就可以约分越掉一大堆吗,上面剩下p~p-q+1下面剩下q~1或者上面剩下p~p-(p-q)+1下面剩下(p-q)~1

选一个小的就直接一个一个除了累起来就好了吧?需要注意的是,求C(p,q)和 C(r,s)不能分开算会乘爆的。。

答案也保证了在1e8内,完全不虚啊。有时间再复习复习唯一分解定理吧。

代码

  1. #include<bits/stdc++.h>  
  2. using namespace std;  
  3. #define db double   
  4. int p,q,r,s;  
  5. db ans;  
  6. int main()  
  7. {  
  8.     while(scanf("%d%d%d%d",&p,&q,&r,&s)==4)  
  9.     {  
  10.         ans=1.0;  
  11.         q=min(q,p-q),s=min(s,r-s);  
  12.         for(int i=1;i<=q||i<=s;i++)  
  13.         {  
  14.             if(i<=q)ans=ans*(p-q+i)/i;  
  15.             if(i<=s)ans=ans/(r-s+i)*i;  
  16.         }  
  17.         printf("%.5lf ",ans);    
  18.     }  
  19. }  

以上是关于UVA10375选择与除法的主要内容,如果未能解决你的问题,请参考以下文章

uva 10375

UVA 10375 Choose and divide

UVA-10375 数学

Choose and divide UVA - 10375

UVa10375 Choose and divide

uva10375 Choose and divide