【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\n",ans);
  18. }
  19. }

原文地址:https://www.cnblogs.com/NSD-email0820/p/9858943.html

时间: 2024-10-20 04:09:38

【UVA10375】选择与除法的相关文章

例题10-3 选择与除法 UVa10375

1.题目描述:点击打开链接 2.解题思路:本题让计算两个组合数的商,既可以直接利用公式,也可以利用唯一分解定理:事先计算10000以内的所有素数,然后计算组合数分解后各个素数的幂,用数组e保存指数即可.这里计算指数时可以利用数论中求n!分解式中各个素因数指数的公式. 3.代码: (利用唯一分解定理) #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<string>

UVA 10375 选择与除法

一看四个整数的范围,<=10000  所以我们肯定不能直接打表求阶乘 利用唯一分解定理(任何一个大于1的正整数都能够被唯一地分解成质因子乘积) #include<iostream> #include<string> #include<string> #include<string.h> #include<stdio.h> #include<queue> #include<math.h> #include<vec

刘汝佳 例题10-3 选择与除法

1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 #include<vector> 5 #include<iostream> 6 using namespace std; 7 8 const int maxn = 10000; 9 vector<int> primes; 10 int e[maxn]; 11 12 /** 13 add_factorial(int n,

java--java语言基础(3)--黑马程序员

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- java语言基础(3) 主要内容:<运算符.键盘录入.顺序结构.选择结构if.三元运算符.选择结构switch.> 1 位运算符的基本用法1 位运算符:是对整数的二进制直接进行操作的 1.<< : 左移:左侧高位丢弃,右侧补0.左移一位,相当于原数 * 2 ; 实际移动的位数 = 要移动的位数 % 32; 2.>> : 带符号右移:右移一位,右侧的最低位丢弃,左侧高位

uva 10375

1 /* 选择与除法_________________________________________________________________________________ 2 3 #include <iostream> 4 #include <map> 5 #include <cmath> 6 #include <vector> 7 #include <cstdio> 8 #include <string> 9 #incl

软件工程课后作业一之30道随机四则运算程序2

一.设计30道随机四则运算程序要求: 1.题目避免重复: 2.可定制(数量/打印方式): 3.可以控制下列参数: 是否有乘除法.是否有括号. 数值范围.加减有无负数.除法有无余数.否支持分数 (真分数, 假分数, …).是否支持小数 (精确到多少位).打印中每行的间隔可调整: 二.设计思路:1.题目避免重复我用3个数组将第一个数,第二个数和运算符(已用数字0-3表示加减乘除)存起来,之后用for循环将新产生的数组单元与以前产生的数组单元一一比较,有重复则将当前参数自减一重新产生新数组单元如此反复

四则运算升级版课堂思路

1,题目避免重复则在输出是判断随机数和随机符号是否全部相同.全部相同则break:2,定制,m为定制份数,n为定制每份题的题数 for(j=0;j<m;j++) {   for(i<0;i<n;i++)   {      a=rand()%100; //产生100以内随机数      b=rand()%100;      d=rand()%4; //产生随机运算符      switch(d)      {          case 0:              cout<&l

结对作业2

结对成员:张成威 代码链接:四则运算 1.测试 2.代码审查 功能模块名称 词法分析程序 审查人 郭洋 审查日期 2018.4.16 代码名称 四则运算 代码作者 张成威 文件结构 重要性 审查项 结论 头文件和定义文件的名称是否合理? 合理 头文件和定义文件的目录结构是否合理? 合理 版权和版本声明是否完整? 不完整 重要 头文件是否使用了 ifndef/define/endif 预处理块? 没有 头文件中是否只存放"声明"而不存放"定义" 是 程序的版式 空行是

7_1 除法(UVa725)&lt;选择合适的枚举对象&gt;

如果把数字0到9分配成2个整数(各五位数),现在请你写一支程序找出所有的配对使得第一个数可以整除第二个数,而且商为N(2<=N<=79),也就是:abcde / fghijk = N这里每个英文字母代表不同的数字,第一个数字可以为0.Input输入包含许多笔待测数据,每列代表一笔待测数据,每笔待测数据包含一个正整数N,N为0时代表输入结束.Output对每笔待测数据由小到大输出每一对符合条件的数.如果找不到符合条件的数对,则输出There are no solutions for N..每笔测