牛客竞赛每日俩题 - Day11
目录
错排问题
有理数运算
错排问题
年会抽奖__牛客网
全部都不获奖的概率
必定是由n个人都拿错的情况种数
除n个人拿出的所有排列情况数
。
n个人拿出的所有排列情况数
显然是n的阶乘。假设
a
的名字没有被a
拿到,其他n - 1
个人都有可能拿到,即有n - 1
种情况。假设b
拿到了a
的名字,那么对于b的名字有两种情况:
- 第一种是
b
的名字被a
拿到了,也就是a
、b
互相拿到了对方的名字,那么对于其他n - 2
个人互相拿错又是一个子问题f(n - 2)
.- 第二种是
b
的名字没有被a
拿到,则剩下的问题是子问题f(n - 1).
因此可得递推公式
f(n) = (n - 1) * (f(n - 1) + f(n - 2))
.最终得出公式n人都不获奖的概率
h(n) = (n - 1) * (f(n - 1) + f(n - 2)) / (n!)
#include <iostream>
#include <cstdio>int main()
{long long d[21] = { 0, 0, 1 }; // 错排数量,预留第一项为0,配合下文中输入的nlong long f[21] = { 1, 1, 2 }; // 阶乘for (int i = 3; i <= 20; i++){d[i] = (i - 1) * (d[i - 1] + d[i - 2]); //错排的递推公式f[i] = i * f[i - 1]; //阶乘的递推公式}int n;while (std::cin >> n){printf("%.2f%%\n", 100.0 * d[n] / f[n]); //用100.0来把结果处理成double,保留两位小数}return 0;
}
有理数运算
Rational Arithmetic (20)__牛客网
C++标准类写法:
#include <iostream>
using namespace std;
typedef long long int64;class Rational
{
public:Rational(int64 n, int64 d){negetive = false;isZero = false;// 在输入时分母永远不可能为0,但是经过运算之后分母可能为0if (0 == d){isZero = true;return;}// 分子小于0,表示为负数if (n < 0){negetive = !negetive;}// 在输入时分母一定不会小于0, 但是经过计算之后分母也可能会小于0if (d < 0){negetive = !negetive;}// 如果分数是假分数,必须要将其化简为真分数 比如:5 / 3----> 1 2/3integer = n / d;numerator = n - integer * d;denominator = abs(d);// 如果不是最简的分数,还需要将其化简为最简的分数: 10 / 15 ----> 2 / 3// 只需给分子和分母分别除分子和分母最大公约数if (numerator < -1 || numerator > 1){int gcd = CalcGCD(abs(numerator), denominator);if (gcd){numerator /= gcd;denominator /= gcd;}}totalnumerator = integer * denominator + numerator;}Rational operator+(const Rational& r)const{int64 n = totalnumerator * r.denominator + r.totalnumerator * denominator;int64 d = denominator * r.denominator;return Rational(n, d);}Rational operator-(const Rational& r)const{int64 n = totalnumerator * r.denominator - r.totalnumerator * denominator;int64 d = denominator * r.denominator;return Rational(n, d);}Rational operator*(const Rational& r)const{int64 n = totalnumerator * r.totalnumerator;int64 d = denominator * r.denominator;return Rational(n, d);}Rational operator/(const Rational& r)const{int64 n = totalnumerator * r.denominator;int64 d = denominator * r.totalnumerator;return Rational(n, d);}
private:// 求最大公约数:辗转相除int64 CalcGCD(int64 a, int64 b){if (0 == b)return a;return CalcGCD(b, a % b);}friend ostream& operator<<(ostream& _cout, const Rational& r){if (r.isZero){_cout << "Inf";return _cout;}if (0 == r.integer && 0 == r.numerator){_cout << "0";return _cout;}// 如果是负数,需要用()括起来if (r.negetive){_cout << "(-";}// 输出有理数:整数 + 分数// 整数: 可能存在也可能不存在if (r.integer){_cout << abs(r.integer);// 如果分数部分存在,整数和分数之间有一个空格if (r.numerator){_cout << " ";}}// 分数: 可能存在也可能不存在if (r.numerator){_cout << abs(r.numerator) << "/" << r.denominator;}if (r.negetive){_cout << ")";}return _cout;}
private:int64 numerator; // 分子int64 denominator; // 分母int64 integer; // 整数部分bool negetive; // 负数bool isZero; // 分母是否为0int64 totalnumerator; // 参与运算的分子:原分子 + 整数部分
};int main()
{int64 n1, d1, n2, d2;while (scanf("%lld/%lld %lld/%lld", &n1, &d1, &n2, &d2) != EOF){Rational r1(n1, d1);Rational r2(n2, d2);cout << r1 << " + " << r2 << " = " << r1 + r2 << endl;cout << r1 << " - " << r2 << " = " << r1 - r2 << endl;cout << r1 << " * " << r2 << " = " << r1 * r2 << endl;cout << r1 << " / " << r2 << " = " << r1 / r2 << endl;}return 0;
}
C语言强行模拟:
#include<iostream>
#include<cmath>
using namespace std;typedef long long ll;ll gcd(ll a,ll b)
{if(b==0) return a;return gcd(b,a%b);
}void totout(ll n,ll d)
{if(d==0){cout<<"Inf"<<endl;return;}ll mod=gcd(n,d);n/=mod;d/=mod;ll zheng=n/d;ll fz=n-zheng*d;ll fm=d;if(fz<0||fm<0||zheng<0) cout<<"(";if(n==0) cout<<0;else if(zheng&&fz==0) printf("%lld",zheng);else if (zheng) printf("%lld %lld/%lld",zheng,fz,abs(fm));else if(fm<0) printf("-%lld/%lld",fz,abs(fm));else printf("%lld/%lld",fz,fm);if(fz<0||fm<0||zheng<0) cout<<")";
}void add(ll n1,ll d1,ll n2,ll d2)
{ll n=n1*d2+n2*d1;ll d=d1*d2;totout(n,d);
}
void sub(ll n1,ll d1,ll n2,ll d2)
{ll n=n1*d2-n2*d1;ll d=d1*d2;totout(n,d);
}
void mul(ll n1,ll d1,ll n2,ll d2)
{ll n=n1*n2;ll d=d1*d2;totout(n,d);
}
void div(ll n1,ll d1,ll n2,ll d2)
{ll n=n1*d2;ll d=d1*n2;totout(n,d);
}int main()
{ll n1,d1,n2,d2;scanf("%lld/%lld %lld/%lld",&n1,&d1,&n2,&d2);totout(n1,d1);cout<<" + ";totout(n2,d2);cout<<" = ";add(n1,d1,n2,d2);cout<<endl;totout(n1,d1);cout<<" - ";totout(n2,d2);cout<<" = ";sub(n1,d1,n2,d2);cout<<endl;totout(n1,d1);cout<<" * ";totout(n2,d2);cout<<" = ";mul(n1,d1,n2,d2);cout<<endl;totout(n1,d1);cout<<" / ";totout(n2,d2);cout<<" = ";div(n1,d1,n2,d2);return 0;
}
牛客竞赛每日俩题 - Day11相关推荐
- 牛客竞赛每日俩题 - Day12
目录 set的插入删除 vector<string>的应用 set的插入删除 数据库连接池__牛客网 [解题思路] 循环接收每组用例,对于每组用例进行如下操作: 1. 依次获取每个状态,如 ...
- 牛客竞赛每日俩题 - Day7
目录 经典01背包问题 二叉树遍历与构造(考研重点) 经典01背包问题 求正数数组的最小不可组成和_百度笔试题_牛客网 参考大佬题解: 动态规划:01背包问题(无物品价值),思想相同,题目最终要求有些 ...
- 牛客竞赛每日俩题 - Day9
目录 日期推算 分解因数 日期推算 美国节日__牛客网 思路: 首先,我们要想找到一个月第N个星期W,一定需要一个参照物,最好的目标当然是这个月的第一天.拿到参照物后,我要能得 到参照物的星期数,然后 ...
- 牛客竞赛每日俩题 - Day3
14天阅读挑战赛 目录 动态规划思想 经典DP 简单的数学问题 动态规划思想 查找两个字符串a,b中的最长公共子串_牛客题霸_牛客网 思路: 本题需要用动态规划求解,MCS[i][j] ...
- 牛客竞赛每日俩题 - 动态规划3
目录 类01背包问题,选or不选 变种走方格 类01背包问题,选or不选 不同的子序列_牛客题霸_牛客网 问题翻译: S有多少个不同的子串与T相同 S[1:m]中的子串与T[1:n]相同的个数 由S的 ...
- 牛客竞赛每日俩题 - Day2
14天阅读挑战赛 目录 字符串函数的熟练使用(模拟) 双指针+模拟+回溯 字符串函数的熟练使用(模拟) 扑克牌大小_牛客题霸_牛客网 别看题目很长,其实就是简单的斗地主,比较两手牌哪边大而已: 思路: ...
- 牛客竞赛每日俩题 - Day5
目录 DP+贪心 dfs迷宫问题(最短路径) DP+贪心 年终奖_牛客题霸_牛客网 思路: 定义f(i,j)表示从左上角走到坐标(i,j)处能获得的最大奖励. 搜索所有从左上角走到右下角的路径,找到最 ...
- 牛客竞赛每日俩题 - 动态规划2
目录 经典DP - 走方格 走方格2.0 分割回文串 分割回文串 - 回文优化 经典DP - 走方格 不同路径的数目(一)_牛客题霸_牛客网 状态: 子状态:从(0,0) 到达 (1, ...
- 牛客竞赛每日俩题 - Day1
14天阅读挑战赛 目录 排序+dfs+简单剪枝 贪心+模拟 排序+dfs+简单剪枝 幸运的袋子_牛客题霸_牛客网 思路: 对于任意两个正整数 a,b 如果满足 a+b>a b ,则必有 一个数为 ...
最新文章
- 火焰图(Flame Graphs)的安装和基本用法
- OpenAI数十亿代码训出Codex:能将英语翻译成代码,给四句话就能写个神经网络...
- Java基本数据类型及String类
- emui10有机会升级鸿蒙,鸿蒙OS+EMUI10,能否助力华为实现科技突围?
- 次数统计-CountMap
- 工作286:v-model没有值会报错
- 俯瞰云原生,这便是供应层
- 按钮点击没有反应_时控开关按键没反应怎么办?
- GIS中的基本概念收集
- Ubuntu 14 中给 APACHE2安装 SSL 模块 Enable SSL site on Ubuntu 14 LTS, Apache 2.4.7:
- SAS的SQL过程(SQL Procedure in SAS)(一)
- 安装增强功能失败:Could not mount the media/drive C:\Program Files\Oracle\VirtualBox/VBoxGuestAdditions.iso
- ubuntu18.04: 安装nanomsg
- android最早的版本,光遇最早版本
- html表格优秀作品,40多个漂亮的网页表单设计实例
- APM32F103 RTC内部时钟源报警中断例程测试
- The Open Group中国首届线上大会 专场三亮点解读
- python mysql日期输出格式_Python/Shell/MySQL时间获取与格式转换
- 软件测试规范如写诗一样有多重要?
- Android网络连接网络
热门文章
- maria安装包mysql_linux安装Mariadb(mysql分支)
- H5创建webApp保存到桌面。
- c++小游戏合集(双人)
- SVN关于previous operation has not finished问题的解决
- Linux的sz和rz命令讲解
- idea 运行报错 Unrecognized option: --add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
- pragma comment的使用(转)
- 操作系统hpf算法事例_操作系统调度算法是什么
- MEMS振镜原理-李萨如图形Matlab仿真
- 什么是七参数?什么是四参数?有什么不同