• 【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. }  
  • 相关阅读:
    52、saleforce 第一篇
    nodejs自定义模块
    NodeJS require路径
    Angularjs ngTable使用备忘
    HTML5拖拽功能中 dataTransfer对象详解
    Javascript闭包深入解析及实现方法
    Grunt实例
    Grunt插件uglify
    javascript 将字符串当函数执行
    多个springboot项目部署在同一tomcat上,出现jmx错误
  • 原文地址:https://www.cnblogs.com/NSD-email0820/p/9858943.html
Copyright © 2020-2023  润新知