题目链接: 

pid=4870">http://acm.hdu.edu.cn/showproblem.php?pid=4870

题目大意:

题意:一个人注冊两个账号,初始rating都是0,他每次拿低分的那个号去打比赛,赢了加50分,输了扣100分,胜率为p,他会打到直到一个号有1000分为止,问比赛场次的期望。

解题思路:

用E(x。y)表示到(1000, 950)这个状态须要多少场。由于(1000,X) X != 950 这样的情况是不可能发生的。最后E(0,0)就是答案。

E(x1, y1) = E(x2, y2) * p + E(x3, y3) * (1 - p) + 1 是状态,所以能够列出210个方程。用高斯消元就可以。

代码:

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<deque>
#include<list>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<numeric>
#include<iomanip>
#include<bitset>
#include<sstream>
#include<fstream>
#define debug puts("-----")
#define pi (acos(-1.0))
#define eps (1e-8)
#define inf (1<<30)
#define seek 31
#define LL long long
#define ULL unsigned long long
#define maxn 222
#define For(i, n) for (int i = 0; i < n; i++)
using namespace std;
double a[maxn][maxn] = {0}, ans[maxn] = {0};
bool l[maxn];
int n;
inline int solve(double a[][maxn], bool l[], double ans[], const int& n) {
int res = 0, r = 0;
for (int i = 0; i < n; i++) l[i] = false;
for (int i = 0; i < n; i++) {
for (int j = r; j < n; j++)
if (fabs(a[j][i]) > eps) {
for (int k = i; k <= n; k++) swap(a[j][k], a[r][k]);
break;
}
if (fabs(a[r][i]) < eps) {
res++;
continue;
}
for (int j = 0; j < n; j++)
if (j != r && fabs(a[j][i]) > eps) {
double tmp = a[j][i] / a[r][i];
for (int k = i; k <= n; k++) a[j][k] -= tmp * a[r][k];
}
l[i] = true, r++;
}
for (int i = 0; i < n; i++)
if (l[i])
for (int j = 0; j < n; j++)
if (fabs(a[j][i]) > 0)
ans[i] = a[j][n] / a[j][i];
return res;
} int cnt = 0, mark[22][22] = {0};
double p;
void build() {
for (int i = 0; i < 20; i++) {
for (int j = 0; j <= i; j++) {
int x = mark[i][j];
a[x][x] = 1, a[x][210] = 1;
a[x][mark[i][max(0, j - 2)]] -= (1 - p);
a[x][mark[max(i, j + 1)][min(i, j + 1)]] -= p;
}
}
}
int main () {
memset(mark, -1, sizeof(mark));
for (int i = 0; i < 20; i++)
for (int j = 0; j <= i; j++)
mark[i][j] = cnt++;
while(~scanf("%lf", &p)) {
memset(a, 0, sizeof(a));
build();
solve(a, l, ans, 210);
printf("%.6lf\n", ans[0]);
}
return 0;
}

2014 Multi-University Training Contest 1 - J Rating的更多相关文章

  1. 2016 Multi-University Training Contest 1 J.Subway

    Subway Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Su ...

  2. 2016 Al-Baath University Training Camp Contest-1 J

    Description X is fighting beasts in the forest, in order to have a better chance to survive he's gon ...

  3. HDU 4870 Rating (2014 Multi-University Training Contest 1)

    Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  4. HDU4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)

    Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  5. 2014 Multi-University Training Contest 9#6

    2014 Multi-University Training Contest 9#6 Fast Matrix CalculationTime Limit: 2000/1000 MS (Java/Oth ...

  6. 2014 Multi-University Training Contest 1/HDU4861_Couple doubi(数论/法)

    解题报告 两人轮流取球,大的人赢,,, 贴官方题解,,,反正我看不懂.,,先留着理解 关于费马小定理 关于原根 找规律找到的,,,sad,,, 非常easy找到循环节为p-1,每个循环节中有一个非零的 ...

  7. 2014 Multi-University Training Contest 1/HDU4864_Task(贪心)

    解题报告 题意,有n个机器.m个任务. 每一个机器至多能完毕一个任务.对于每一个机器,有一个最大执行时间Ti和等级Li,对于每一个任务,也有一个执行时间Tj和等级Lj.仅仅有当Ti>=Tj且Li ...

  8. HDU 2018 Multi-University Training Contest 3 Problem A. Ascending Rating 【单调队列优化】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6319 Problem A. Ascending Rating Time Limit: 10000/500 ...

  9. hdu 4937 2014 Multi-University Training Contest 7 1003

    Lucky Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) T ...

随机推荐

  1. Juuluu 旗下企业站点管理系统3.0.1公布!

    KgE金刚企业站点管理系统是广州聚龙软件为国内中小企业开发的一款企业站点管理系统,KgE採用可视化的标签模型,可在Dreamvear等网页编辑下可视化编辑,KgE使用javaeemsyqlyuijqu ...

  2. ActivityManager

    android.app.ActivityManager 这个类主要用来管理全部设备上的Activities. 权限:android.permission.GET_TASKS 方法:| 返回类型     ...

  3. (转载)QT中PRO文件写法的详细介绍,很有用,很重要!

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下: 1. 注释从“#”开始,到 ...

  4. Delphi - SEH研究

    技术交流,DH讲解. 前几天一个朋友在弄游戏外挂想带NP调试,就像自己来捕获游戏的异常.好像就要用到SEH这方面的知识.一起研究了一下,这里看下研究 和 在网上找的资料吧.SEH就是Structure ...

  5. CButtonEx的实现

    要想修改CButton类按钮背景颜色和文字颜色,必须利用自绘方法对按钮进行重新绘制.这可以通过定义一个以CButton为基类的新按钮类来实现.以下为具体的实现方法: 方法一: 加入一个新类,类名:CB ...

  6. Boost的安装与使用(整整83篇)

    http://www.cnblogs.com/lidabo/category/542245.html

  7. Highcharts将数据以图表的形式展现

    1.首先将Highcharts插件所需的js跟css样式文件引入项目中,下载地址为:Highcharts.rar 2.在前台页面中添加一个存放图表的容器 <div id="contai ...

  8. IOS之【地图MapKit】

    iOS地图位置开发   iPhone SDK提供了三个类来管理位置信息:CLLocation CLLocationManager 和 CLLHeading(不常用).除了使用GPS来获取当前的位置信息 ...

  9. Ajax技术--考试计时并自动提交试卷

    1.概述 在开发网络考试系统时,考试计时并自动提交试卷是必不可少的功能.由于在答卷过程中,试卷不能刷新,所以需要使用Ajax实现无刷新操作.运行本实例,访问准备考试页面index.jsp,在该页面中, ...

  10. 【问题解决】syntax error: unexpected end of file或-bash: ./full_build.sh: /bin/bash^M: bad interpreter: No

    在阅读的过程中有不论什么问题,欢迎一起交流 邮箱:1494713801@qq.com    QQ:1494713801 运行一个脚本full_build.sh 时, 一直是提示我: -bash: ./ ...