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 ...
随机推荐
- Codis连接异常问题处理
报错信息可以看出:由于没有正常的关闭连接,导致连接异常 Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Unex ...
- 重读金典------高质量C编程指南(林锐)-------第七章 内存管理
2015/12/10补充: 当我们需要给一个数组返回所赋的值的时候,我们需要传入指针的指针.当我们只需要一个值的时候,传入指针即可,或者引用也可以. 结构大致如下: char* p = (char*) ...
- centos7 安装rocketmq(quick start)
Quick Start This quick start guide is a detailed instruction of setting up RocketMQ messaging system ...
- Oracle 中for update和for update nowait的区别
http://www.cnblogs.com/quanweiru/archive/2012/11/09/2762223.html 1.for update 和 for update nowait 的区 ...
- Android_程序未处理异常的捕获与处理
1.简单介绍 对于程序抛出的未被捕获的异常,可能会导致程序异常退出,界面不友好且应记录关键错误信息上传至server. 这里主要使用UncaughtExceptionHandler 2.代码实现 pu ...
- HTML5 2D平台游戏开发#2跳跃与二段跳
在上一篇<Canvas制作时间与行为可控的sprite动画>中已经实现了角色的左右移动,本篇继续实现角色的一系列动作之一:跳跃.先来看看最终效果: 要实现跳跃,必须模拟垂直方向的速度和重力 ...
- 自定义 Android 钟表盘,这一篇就够了
关于本文:本文原先在我的 CSDN 博客发布(由图片水印能发现),整理以往博客过程中,发现当时总结的很仔细,所以将其迁移到这里,希望对大家在自定义 View 方面,能有所帮助
- PHP、AJAX综合练习(增、删、改、查、分页、模糊查询)
先来几张效果图 主页面分页显示: 关键字查询,关键字描红 添加数组,弹出窗口,点击保存,再不刷新页面的同时添加到网页数据 修改界面:弹出窗口,文本框中保留点击的车辆的原始信息 主页面代码 <me ...
- 【BZOJ3796】Mushroom追妹纸 二分+hash
[BZOJ3796]Mushroom追妹纸 Description Mushroom最近看上了一个漂亮妹纸.他选择一种非常经典的手段来表达自己的心意——写情书.考虑到自己的表达能力,Mushroom决 ...
- Django Web开发指南笔记
Django Web开发指南笔记 语句VS表达式 python代码由表达式和语句组成,由解释器负责执行. 主要区别:表达式是一个值,它的结果一定是一个python对象:如:12,1+2,int('12 ...