Fleecing the Raffle(NCPC 2016 暴力求解)
题目:
A tremendously exciting raffle is being held, with some tremendously exciting prizes being given out. All you have to do to have a chance of being a winner is to put a piece of paper with your name on it in the raffle box. The lucky winners of the p prizes are decided by drawing p names from the box. When a piece of paper with a name has been drawn it is not put back into the box – each person can win at most one prize.
Naturally, it is against the raffle rules to put your name in the box more than once. However, it is only cheating if you are actually caught, and since not even the raffle organizers want to spend time checking all the names in the box, the only way you can get caught is if your name ends up being drawn for more than one of the prizes. This means that cheating and placing your name more than once can sometimes increase your chances of winning a prize.
You know the number of names in the raffle box placed by other people, and the number of prizes that will be given out. By carefully choosing how many times to add your own name to the box, how large can you make your chances of winning a prize (i.e., the probability that your name is drawn exactly once)?
Input:
The input consists of a single line containing two integers n and p (2 ≤ p ≤ n ≤ 106 ), where n is the number of names in the raffle box excluding yours, and p is the number of prizes that will be given away.
Output:
Output a single line containing the maximum possible probability of winning a prize, accurate up to an absolute error of 10-6.
题意:
有n个人,p个获奖名额。游戏规则为每个人往一个盒子中放一张带有自己名字的纸条,然后一次性从中拿出p张这条,这p个就是获奖的人。小明想往里边多放一些带有自己名字的纸条来提高自己中奖的概率,被发现作弊的情况为,抽出的p张纸条中有两条写着“小明”。问在不被发现的情况下,小明通过作弊最高的获奖率为多少。
思路:
嗯,,,,,,在队友的启发下,跟高中数学老师把概率这块的知识要回来后,终于自己推出了公式如下图(字丑不要喷啊):
图中圈出来的两部分的项是相等的。所以枚举a直接上暴力大法就可以了。写完交题,结果TLE,然后在取最大值之前输出了一下答案,发现到达最大后后边的值都是相等的就没有必要计算了,直接break就ok了。
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string.h>
#include <cstdlib>
#include <algorithm>
#include <stack>
#include <map>
#include <malloc.h>
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + ;
typedef long long ll;
double m, p; int main() {
cin >> m >> p;
double ans = 1.0, sum = 0.0;
for(double k = ; k <= m; k++) {
ans = 1.0;
ans = ans*(k/(m+k));
for(double i = ; i < p-; i++) {
ans *= (m - i);
ans /= (m - i + k - );
}
if(ans > sum)
sum = ans;
else
break;
}
sum = sum*p;
cout << setprecision() << sum << endl;
return ;
}
/*
样例输入:
3 2
23 5
样例输出:
0.6
0.45049857550
*/
Fleecing the Raffle(NCPC 2016 暴力求解)的更多相关文章
- POJ 1562(L - 暴力求解、DFS)
油田问题(L - 暴力求解.DFS) Description The GeoSurvComp geologic survey company is responsible for detecting ...
- Urozero Autumn 2016. NCPC 2016
A. Artwork 倒过来并查集维护即可. #include<cstdio> #include<algorithm> using namespace std; const i ...
- 逆向暴力求解 538.D Weird Chess
11.12.2018 逆向暴力求解 538.D Weird Chess New Point: 没有读好题 越界的情况无法判断,所以输出任何一种就可以 所以他给你的样例输出完全是误导 输出还搞错了~ 输 ...
- 隐型马尔科夫模型(HMM)向前算法实例讲解(暴力求解+代码实现)---盒子模型
先来解释一下HMM的向前算法: 前向后向算法是前向算法和后向算法的统称,这两个算法都可以用来求HMM观测序列的概率.我们先来看看前向算法是如何求解这个问题的. 前向算法本质上属于动态规划的算法,也就是 ...
- Nordic Collegiate Programming Contest (NCPC) 2016
A Artwork B Bless You Autocorrect! C Card Hand Sorting D Daydreaming Stockbroker 贪心,低买高卖,不要爆int. #in ...
- CSU-2019 Fleecing the Raffle
CSU-2019 Fleecing the Raffle Description A tremendously exciting raffle is being held, with some tre ...
- BestCoder Round #79 (div.2)-jrMz and angles,,暴力求解~
jrMz and angle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- hdu6570Wave (暴力求解)
Problem Description Avin is studying series. A series is called "wave" if the following co ...
- <字符串匹配>KMP算法为何比暴力求解的时间复杂度更低?
str表示文本串,m表示模式串; str[i+j] 和 m[j] 是正在进行匹配的字符; KMP的时间复杂度是O(m+n) , 暴力求解的时间复杂度是O(m*n) KMP利用了B[0:j]和A[i ...
随机推荐
- 蓝桥 ADV-233 算法提高 队列操作 【STL】
算法提高 队列操作 时间限制:1.0s 内存限制:256.0MB 问题描述 队列操作题.根据输入的操作命令,操作队列(1)入队.(2)出队并输出.(3)计算队中元素个数并输出. ...
- 洛谷 P1570【NOIP2013】花匠
题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定 把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希 望剩下的花排列得比较别致. 具 ...
- hive使用
运行hadoop [root@hadoop0 ~]# start-all.sh 进入命令行[root@hadoop0 ~]# hive 查询昨天的表 hive> select * from st ...
- 蓝书2.2 KMP算法
T1 Radio Transmission bzoj 1355 题目大意: 一个字符串,它是由某个字符串不断自我连接形成的 但是这个字符串是不确定的,现在只想知道它的最短长度是多少 思路: kmp 输 ...
- python time 时间模块
time():获取当前系统的时间戳ctime():以人类可读的方式打印当前系统时间sleep():接受一个参数,表示休眠时间 #!/usr/bin/env python #coding:utf8 im ...
- bzoj2521
最小生成树+最小割 ...我太zz了,没看出来全体减1是一个加1,看见后就是sb题了... 我们发现根据克鲁斯卡尔的过程,我们把边从小到大加入,如果两点已经相连就跳过,那么我们把所有小于等于这条边的边 ...
- 删除Oracle文件、注册表
用Oracle自带的卸载程序不能从根本上卸载Oracle,从而为下次的安装留下隐患,那么怎么才能完全卸载Oracle呢?那就是直接注册表清除,步骤如下: 1. 开始->设置->控制面板-& ...
- Line: 220 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
转自:http://blog.51cto.com/alinazh/1276363 在启动tomcat的时候出现错误: Line: 220 - com/opensymphony/xwork2/sprin ...
- 揭秘Node.js深受欢迎的原因
揭秘Node.js深受欢迎的原因 http://www.php100.com/html/dujia/2014/1127/7922.html
- E20170606-gg
complete adj. 完整的; 完成的; (用以强调) 完全的; 达到结尾的; vt. 完成,使完满; 完成或结束; 填写(表格); process n. 过程; 工序; 做事方法; 工艺 ...