LightOJ - 1274 Beating the Dataset —— 期望
题目链接:https://vjudge.net/problem/LightOJ-1274
| Time Limit: 4 second(s) | Memory Limit: 32 MB |
You are in a contest, and unfortunately you don't have much time. You have one problem in hand; you just glanced at the sample output and found that it just wants 'YES' or 'NO'. So, you have made another plan instead of solving the problem as you know the system very well.
For this problem, every test case is stored in a separate file. When a submission is found, the system successively runs the solution on all tests of a problem, and for each test the checking process goes as follows. The input is copied to the file input.txt. Then the solution is launched. It reads the input from the file input.txt and writes the result to the file output.txt. When it finishes, the correct answer is copied to the file answer.txt. If the contents of the files answer.txt and output.txt match, the test is assumed to be passed; otherwise, the test is not passed.
So, you decided to write a program that would operate as follows. If the folder containing the program doesn't contain the file answer.txt (i.e. the program is run on the first test), then the program outputs "YES". Otherwise, the program outputs the contents of the file answer.txt. And before the contest, the sizes of the data files are given to you.
And it's clear that the size of the file with the answer "YES" is 3 bytes, the size of the file with the answer "NO" is 2 bytes, and all the variants of the order of tests are equally probable. Now you want to calculate the average number of tests that your solution won't pass.
Input
Input starts with an integer T (≤ 10), denoting the number of test cases.
Each case starts with a line containing two integers n (1 ≤ n ≤ 5000) and s (2n ≤ s ≤ 3n) where n denotes the number of data sets and s denotes the total size of the answer files.
Output
For each case, print the case number and the average number of tests your solution won't pass. Error less than 10-6 will be ignored.
Sample Input |
Output for Sample Input |
|
4 3 7 1 2 1 3 4 10 |
Case 1: 2 Case 2: 1 Case 3: 0 Case 4: 2.5000000000 |
Note
For the first case, one of the three answers is "YES" and two answers are "NO". If the order of tests is "YES-NO-NO", then your solution won't pass the second test only; if the order is "NO-YES-NO", then it will pass none of the tests; if the order is "NO-NO-YES", the solution won't pass the first and the third tests.
题意:
是一个人做ACM题,这道题的数据的字节数和提问数已经给出,答案只有YES或NO。那个人做不来这道题,只能蒙,一开始一定蒙YES,数据会告诉你这题的正确答案,之后下一题用上一题的正确答案蒙,求蒙错的数据组数的期望数量。
题解:
1.可知:
yes + no = n
3*yes + 2*no = s
因此可以联立解出yes、no的个数。
2.dp[i][j][isYes]:处理到第i个位置,前面已经有j个yes,并且第i个是yes\no时(0代表yes)的情况下,后面错误次数的期望值。
3.可知第i+1个位置出现yes的概率为:py = (yes-j)/(n-i),no的概率为:pw = (no-(i-j))/(n-i)。
3.1 当j+1<=yes时,即还可以放yes,那么:
dp[i][j][0] = py*dp[i+1][j+1][0] + pw*(dp[i+1][j][1]+1);
dp[i][j][1] = py*(dp[i+1][j+1][0]+1) + pw*dp[i+1][j][1];
3.2 当j==yes时,即yes已经放完了,那么后面只能放no:
dp[i][j][0] = pw*(dp[i+1][j][1]+1);
dp[i][j][1] = pw*dp[i+1][j][1];
4.由于数组太大,所以要用滚动数组。
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <string>
#include <set>
using namespace std;
typedef long long LL;
const int INF = 2e9;
const LL LNF = 9e18;
const int MOD = 1e9+;
const int MAXN = 5e3+; double dp[][MAXN][];
int main()
{
int T, kase = ;
scanf("%d", &T);
while(T--)
{
int n, s;
scanf("%d%d", &n, &s);
int yes = s - *n;
int no = *n - s;
dp[n%][yes][] = dp[n%][yes][] = ;
for(int i = n-; i>=; i--)
{
int now = i%, nex = (i+)%;
int minYes = max(,i-no), maxYes = min(i,yes);
for(int j = minYes; j<=maxYes; j++)
{
double py = 1.0*(yes-j)/(n-i);
double pw = 1.0*(no-(i-j))/(n-i);
if(j+<=yes)
{
dp[now][j][] = py*dp[nex][j+][] + pw*(dp[nex][j][]+);
dp[now][j][] = py*(dp[nex][j+][]+) + pw*dp[nex][j][];
}
else
{
dp[now][j][] = pw*(dp[nex][j][]+);
dp[now][j][] = pw*dp[nex][j][];
}
}
}
printf("Case %d: %.10lf\n", ++kase, dp[][][]);
}
}
LightOJ - 1274 Beating the Dataset —— 期望的更多相关文章
- 【非原创】LightOJ-1274 Beating the Dataset【期望dp】
学习博客:戳这里
- LightOJ 1030 Discovering Gold(期望)
Description You are in a cave, a long cave! The cave can be represented by a 1 x N grid. Each cell o ...
- LightOj:1030-Discovering Gold(期望dp模板)
传送门:http://www.lightoj.com/volume_showproblem.php?problem=1030 Discovering Gold Time Limit: 2 second ...
- LightOJ 1030 Discovering Gold (概率/期望DP)
题目链接:LightOJ - 1030 Description You are in a cave, a long cave! The cave can be represented by a \(1 ...
- LightOJ 1287 Where to Run(期望)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1287 题意:给定一个n个点的无向图(0到n-1),你开始在0.你开始遍历这个图 ...
- LightOj_1274 Beating the Dataset
题目链接 题意: 给一个文档, 这个文档由yes .no 组成, 共有s个byte, 共有n个yes.no. 假设yes的个数为yes_num, no的个数为no_num. 将这n个数进行排列, 对于 ...
- LightOJ 1030 Discovering Gold (期望)
https://vjudge.net/problem/LightOJ-1030 题意: 在一个1×N的格子里,每个格子都有相应的金币数,走到相应格子的话,就会得到该格子的金币. 现在从1格子开始,每次 ...
- LightOJ - 1287 Where to Run —— 期望、状压DP
题目链接:https://vjudge.net/problem/LightOJ-1287 1287 - Where to Run PDF (English) Statistics Forum T ...
- LightOJ - 1027 A Dangerous Maze —— 期望
题目链接:https://vjudge.net/problem/LightOJ-1027 1027 - A Dangerous Maze PDF (English) Statistics For ...
随机推荐
- 利用iptables的NAT代理实现内网访问外网
利用NAT代理实现内网访问外网 背景及原理 若局域网中的两台计算机只能有一台能够访问外网,而这两台计算机之间能相互通信,那么可以配置能访问外网的那台服务器实现路由器的功能,即实现其他机器的NAT转换, ...
- linux 下route命令
参考:http://blog.sina.com.cn/s/blog_67146a750100zoyi.html 为了让设备能访问另一个子网,需要在设备里增加路由到子网络,下面是一些资料.基本操作如下: ...
- maven 配置jetty插件
<build> <finalName>shiroweb</finalName> <plugins> & ...
- Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental……
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to th ...
- HDU 1875 畅通project再续 (最小生成树 水)
Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其它的小岛时都要通过划小船来实现. 如今政府决定大力发展百岛 ...
- Spring2.5学习3.2_编码剖析@Resource注解的实现原理
首先看一下J2EE提供的@Resource注解:该注解默认安照名称进行装配,名称能够通过name属性进行指定, 假设没有指定name属性,当注解写在字段上时,默认取字段名进行依照名称查找,假设注解写在 ...
- 我是这样使用template.js来异步渲染数据的demo
直接来代码吧! <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- yosemite开启HAXM硬件加速执行安卓虚拟机
android sdk安装HAXM发现不能正常执行 $ kextstat | grep intel 发现无进程执行 $ sudo kextload –b com.intel.kext.intelhax ...
- 电容有什么作用?为什么cpu电源引脚都并联一个电容?
管理 随笔- 17 文章- 1 评论- 1 电容有什么作用?为什么cpu电源引脚都并联一个电容? 正文: 参考资料:http://blog.sina.com.cn/s/blog_7880d3 ...
- Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connect
Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connect ...