codeforces626D . Jerry's Protest (概率)
Andrew and Jerry are playing a game with Harry as the scorekeeper. The game consists of three rounds. In each round, Andrew and Jerry draw randomly without replacement from a jar containing n balls,
each labeled with a distinct positive integer. Without looking, they hand their balls to Harry, who awards the point to the player with the larger number and returns the balls to the jar. The
winner of the game is the one who wins at least two of the three rounds.
Andrew wins rounds 1 and 2 while Jerry wins round 3, so Andrew wins the game. However, Jerry is unhappy with this system, claiming that he will often lose the match despite having the higher overall total. What is the probability that the sum of the three balls
Jerry drew is strictly higher than the sum of the three balls Andrew drew?
The first line of input contains a single integer n (2 ≤ n ≤ 2000)
— the number of balls in the jar.
The second line contains n integers ai (1 ≤ ai ≤ 5000)
— the number written on the ith ball. It is guaranteed that no two balls have the same number.
Print a single real value — the probability that Jerry has a higher total, given that Andrew wins the first two rounds and Jerry wins the third. Your answer will be considered correct if its absolute or relative error does not exceed 10 - 6.
Namely: let's assume that your answer is a, and the answer of the jury is b.
The checker program will consider your answer correct, if .
2
1 2
0.0000000000
3
1 2 10
0.0740740741
In the first case, there are only two balls. In the first two rounds, Andrew must have drawn the 2 and Jerry must have drawn the 1,
and vice versa in the final round. Thus, Andrew's sum is 5 and Jerry's sum is 4,
so Jerry never has a higher total.
In the second case, each game could've had three outcomes — 10 - 2, 10 - 1,
or 2 - 1. Jerry has a higher total if and only if Andrew won 2 - 1 in
both of the first two rounds, and Jerry drew the 10 in the last round. This has probability .
题意:两个人在做游戏,一个袋子里有n个球,球上的数字大小都不相同,共进行三回合,每一回合两个人同时各自从袋子里拿出一个球,求前两个回合A拿出的球的数字大于B,但是三个回合加起来的数字的和B大于A的概率。
思路:我们可以先用cnt[i]记录一个局面中胜者和败者差值为i的取法数,再用cnt2[i]表示前两个局面胜者和败者差值的总和为i的方案数,然后统计cnt2的前缀和,那么符合题意的方案总数即为for(i=1;i<=5000;i++){tot+=cnt2[i]*cnt[i-1]};
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
#define inf 99999999
#define pi acos(-1.0)
ll cnt1[5005],cnt2[10050];
int a[2005];
int main()
{
int n,m,i,j;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
}
sort(a+1,a+1+n);
for(i=1;i<=n;i++){
for(j=1;j<i;j++){
cnt1[a[i]-a[j] ]++;
}
}
for(i=1;i<=5000;i++){
for(j=1;j<=5000;j++){
cnt2[i+j]+=cnt1[i]*cnt1[j];
}
}
for(i=1;i<=10000;i++){
cnt2[i]=cnt2[i]+cnt2[i-1];
}
ll tot=0;
for(i=1;i<=5000;i++){
tot+=cnt2[i-1]*cnt1[i];
}
double num=n*(n-1)/2;
printf("%.10f\n",(double)tot/num/num/num );
}
return 0;
}
codeforces626D . Jerry's Protest (概率)的更多相关文章
- codeforces626D . Jerry's Protest
Andrew and Jerry are playing a game with Harry as the scorekeeper. The game consists of three rounds ...
- Codeforces 626D Jerry's Protest(暴力枚举+概率)
D. Jerry's Protest time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...
- 8VC Venture Cup 2016 - Elimination Round D. Jerry's Protest 暴力
D. Jerry's Protest 题目连接: http://www.codeforces.com/contest/626/problem/D Description Andrew and Jerr ...
- Codeforces 626D Jerry's Protest 「数学组合」「数学概率」
题意: 一个袋子里装了n个球,每个球都有编号.甲乙二人从每次随机得从袋子里不放回的取出一个球,如果甲取出的球比乙取出的球编号大则甲胜,否则乙胜.保证球的编号xi各不相同.每轮比赛完了之后把取出的两球放 ...
- 数学(概率)CodeForces 626D:Jerry's Protest
Andrew and Jerry are playing a game with Harry as the scorekeeper. The game consists of three rounds ...
- CodeForces 626D Jerry's Protest
计算前两盘A赢,最后一盘B赢的情况下,B获得的球的值总和大于A获得的球总和值的概率. 存储每一对球的差值有几个,然后处理一下前缀和,暴力枚举就好了...... #include<cstdio&g ...
- codeforce626D (概率)
D. Jerry's Protest time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 8VC Venture Cup 2016 - Elimination Round
在家补补题 模拟 A - Robot Sequence #include <bits/stdc++.h> char str[202]; void move(int &x, in ...
- 加州大学伯克利分校Stat2.2x Probability 概率初步学习笔记: Final
Stat2.2x Probability(概率)课程由加州大学伯克利分校(University of California, Berkeley)于2014年在edX平台讲授. PDF笔记下载(Acad ...
随机推荐
- python模块详解 | unittest(单元测试框架)(持续更新中)
目录: why unittest? unittest的四个重要概念 加载测试用例的三个方法 自动加载测试用例 忽略测试和预期失败 生成html测试报告 why unittest? 简介: Unitte ...
- 【Oracle】将数据库设为开机自启
由于某些特殊条件,需要将oracle数据库设置为开机自己,其实很简单 环境:oracle10gR2 1.修改/etc/oratab # This file is used by ORACLE util ...
- 【Oracle】查询执行慢的sql
查询执行最慢的sql select * from (select sa.SQL_TEXT, sa.SQL_FULLTEXT, sa.EXECUTIONS "执行次数", round ...
- SDUST数据结构 - 19级期末考试
判断题: 选择题: 函数题: 6-1 统计二叉树叶子结点个数: 题目: 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typ ...
- buuctf刷题之旅—web—EasySQL
打开环境,发现依旧是sql注入 GitHub上有源码(https://github.com/team-su/SUCTF-2019/tree/master/Web/easy_sql) index.php ...
- C# url的编码解码,xml和json的序列化和反序列化
参考中国慕课网dot net web编程应用程序实践 using System; using System.Collections.Generic; using System.IO; using Sy ...
- kioptrixVM3
简介 Vulnhub是一个提供各种漏洞环境的靶场平台. 个人学习目的:1,方便学习更多类型漏洞.2,为OSCP做打基础. 下载链接 https://www.vulnhub.com/entry/kiop ...
- layui表格前端格式化时间戳字段
layui.use(['util','table'], function(){ var table = layui.table; var util = layui.util; //... ...
- 第一章:起步(python环境搭建)
Python 环境搭建 学习python的第一步,就是要学习python开发环境的配置,在配置好python开发环境后,你需要再安装一款比较趁手的编辑器,事实上,python解释器本身就可以进行一些编 ...
- 网络编程 — Linux TCP服务端和客户端
1. 服务端 #include <stdlib.h> #include <string.h> #include <errno.h> #include <sig ...