[BC Round#26] Card 【各种水】
题目链接:HDOJ - 5159
这道题的做法太多了..BC的第二题也是可以非常水的..
算法一
我在比赛的时候写的算法是这样的..
预处理出所有的答案,然后对于每个询问直接输出。
询问 (a, b) 记作 (a, b) 。
(a, b) 的答案是由 (a, b-1) 的答案推出的。
(a, 1) 的答案是 1 到 a 的平均数,着十分显然。
如果 b > 1 ,那么我们就考虑在第 b 次,我们抽到每种牌的概率都是 1/a ,然后这张牌之前 b-1 次没被抽到的概率为 ((a-1)/a)^(b-1) ,那么第 b 次新获得的期望得分就是
Sum(1~a) * ((a-1)/a)^(b-1) * (1/a) 。然后这个值加上 (a, b-1) 的答案就是 (a, b) 的答案了。
【代码】
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>using namespace std;typedef double DB;const int MaxN = 100000 + 5, MaxM = 5 + 2;DB Ans[MaxN][MaxM];int main()
{int T, a, b;scanf("%d", &T);DB t;for (int i = 1; i <= 100000; ++i) {for (int j = 1; j <= 5; ++j) {if (j == 1) {Ans[i][j] = (DB)(1 + i) / 2.0;t = (DB)(i - 1) / (DB)i;continue;}Ans[i][j] = Ans[i][j - 1] + (DB)(1 + i) / 2.0 * t;if (j == 5) continue;t *= (DB)(i - 1) / (DB)i;}}for (int Case = 1; Case <= T; ++Case) {scanf("%d%d", &a, &b);printf("Case #%d: %.3lf\n", Case, Ans[a][b]);}return 0;
}
算法二
这种算法是对于 (a, b) 直接求,写起来简单多了。
我们考虑每一张牌,它在 b 次之内如果被抽到了,得分就会加上它的值,那么它在 b 次之内有多大概率被抽到呢?
这个不好直接算,我们就考虑,b 次之内都没有被抽到的概率有多大呢?这个显然就是 ((a-1)/a)^(b) 。那么 b 次之内抽到它的概率就是 1 - ((a-1)/a)^b ,这个概率乘它的值就是这张牌对期望得分的贡献。
那么答案就是 Sum(1~a) * (1 - ((a-1)/a)^b) 。
【代码】
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>using namespace std;typedef double DB;const int MaxN = 100000 + 5, MaxM = 5 + 2;DB Ans[MaxN][MaxM];DB Solve(int a, int b) {DB t = 1;for (int i = 1; i <= b; ++i) t *= (DB)(a - 1) / a;t = 1 - t;return (DB)(1 + a) * (DB)a / 2.0 * t;
}int main()
{int T, a, b;scanf("%d", &T);for (int Case = 1; Case <= T; ++Case) {scanf("%d%d", &a, &b);printf("Case #%d: %.3lf\n", Case, Solve(a, b));}return 0;
}
转载于:https://www.cnblogs.com/JoeFan/p/4216705.html
[BC Round#26] Card 【各种水】相关推荐
- HDU 5804 BestCoder Round #86 Price List (水题)
Price List 题目链接: 点我打开链接 Source BestCoder Round #86 题意:有一个人去 n 间商店购物,在每家商店购买最多一件物品,也可以什么都不买.给你每家商店的物 ...
- Google Code Jam 2015 Round 1A Mushroom Monster 水
题意:每10秒扫描一下盘子,查看盘子里面的面包个数,问你主角用两种吃法可能吃得的最少的面包. 1)任意吃. 2)每秒以恒定速度. 解题思路:暴力,找差值. 解题代码: 1 // File Name: ...
- Educational Round 26 C. Two Seals
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- 【Educational Codeforces Round 6A】【水题】Professor GukiZ's Robot 曼哈顿距离
A. Professor GukiZ's Robot time limit per test 0.5 seconds memory limit per test 256 megabytes input ...
- oracle中负数的四舍五入,oracle中round()四舍五入
oracle中round()四舍五入 语法: Round 函数 语法为ROUND(number,num_digits) 其中Number是需要进行四舍五入的数字:Num_digits为指定的位数,按此 ...
- 玲珑杯 1164 - 战舰萝莉 线段树水题
点击打开链接 DESCRIPTION 在大战之后,法力浮·鳝AK迅速驾船驶向北海.当然他知道水之灵不可能那么容易得到,正如爱迪生曾说过:"要把BOSS打倒就要准备足够的等级."所以 ...
- J2EE高级软件工程师面试题集
第一章:J2EE高级软件工程师面试题集 --JAVA基础部分 1.面向对象的特征有哪些方面1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不 ...
- javascript开发HTML5游戏--斗地主(单机模式part2)
最近学习使用了一款HTML5游戏引擎(青瓷引擎),并用它尝试做了一个斗地主的游戏,简单实现了单机对战和网络对战,代码可已放到github上,在此谈谈自己如何通过引擎来开发这款游戏的. 客户端代码 服务 ...
- 【cf】Codeforces 题解等汇总
[cf]Codeforces Round #774 (Div. 2) 前4题 [cf]Codeforces Round #774 (Div. 2) 前4题_legend_yst的博客-CSDN博客 [ ...
最新文章
- 今年,你会为5G消费吗?就一分钟,求投票
- POJ 1236 学校网络间的强连通
- 【Android RTMP】音频数据采集编码 ( FAAC 音频编码参数设置 | FAAC 编码器创建 | 获取编码器参数 | 设置 AAC 编码规格 | 设置编码器输入输出参数 )
- SpringCloud学习成长之 十一 Docker部署cloud项目
- 城管威逼交警“让老百姓笑话”
- Python基础总结之常用内置方法总结
- springBoot 通过使用log4j2
- 机器学习(八)Apriori算法学习
- 苹果推出Apple Pay防欺诈功能 目前仅限于Visa
- java输入某年某个季度_Java获取某年某季度的第一天出错
- 一篇不错的讲解Java异常的文章
- 学习英语,先记下留着后用
- § 1.3 简 单 的 Java程 序
- 史上最全Java基础视频教程
- LoadRunner报错vuser_init.c(18): Error: nca_connect_server: cannot communicate
- Flask Marshmallow基本使用
- 手机浏览器怎么下载视频,第三方手机浏览器下载视频的方法
- android:关于Handle
- 大话西游手游服务器维护要多久,大话西游手游2017年1月5日维护公告
- Grafana安装与配置
热门文章
- mysql数据库用户的创建_mysql创建用户及数据库
- python日志模块备份_Python Logging模块 输出日志颜色、过期清理和日志滚动备份
- 五、scrapy爬虫框架——logging 模块的使用
- LeetCode 2166. 设计位集(Bitset)
- LeetCode 1670. 设计前中后队列(deque)
- LeetCode 340. 至多包含 K 个不同字符的最长子串(滑动窗口)
- LeetCode 837. 新21点(动态规划)
- 程序员面试金典 - 面试题 16.11. 跳水板(数学)
- LeetCode 129. 求根到叶子节点数字之和(DFS)
- java set hashcode_Java学习笔记_180724_HashSet_hashCode()