【sdut2878】Circle

题目链接http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2878.html

题意

n个结点编号为0到n-1组成一个环。如果当前在结点x,那么它等概率的走向 (x+1)mod n,(x-1) 问从0到x的期望步数是多少

分析

高斯消元解决带环概率DP

f[i]表示当前在i结点,走到x结点得期望步数。f[x]=0。

f[i]=f[i+1]*0.5+f[i-1]*0.5+1

整理得到 1=f[i+1]*0.5+f[i-1]*0.5-f[i] 所以得到了n个方程组有n个未知量,然后通过高斯消元求解。

 1    #include <cstdio>
 2     #include <cstring>
 3     #include <algorithm>
 4     #include <iostream>
 5     #include <cmath>
 6
 7     using namespace std;
 8     const int maxn=1000+100;
 9     double f[maxn],a[maxn][maxn];
10     int T,n,x;
11     void Gauss(){
12         int k,col;
13         for(k=0,col=0;k<n&&col<n;k++,col++){
14             int max_k=k;
15             for(int i=k;i<n;i++){
16                 if(fabs(a[i][col])>fabs(a[max_k][col]))max_k=i;
17             }
18             if(max_k!=k){
19                 for(int i=0;i<=n;i++)
20                     swap(a[k][i],a[max_k][i]);
21             }
22             if(a[k][col]==0){
23                 k--;
24                 continue;
25             }
26             for(int i=k+1;i<n;i++){
27                 if(a[i][col]){
28                     double g=a[i][col]/a[k][col];
29                     for(int j=0;j<=n;j++){
30                         a[i][j]-=a[k][j]*g;
31                     }
32                 }
33             }
34         }
35         for(int i=n-1;i>=0;i--){
36             double g=a[i][n];
37             for(int j=i+1;j<n;j++){
38                 if(a[i][j]!=0){
39                     g-=a[i][j]*f[j];
40                 }
41             }
42             f[i]=g/a[i][i];
43         }
44         return ;
45     }
46     int main(){
47         scanf("%d",&T);
48         for(int t=1;t<=T;t++){
49             memset(a,0,sizeof(a));
50             scanf("%d%d",&n,&x);
51             for(int i=0;i<n;i++){
52                 if(i==0){
53                     a[i][i]=1.0;
54                     a[i][n]=0;
55                 }else{
56                     a[i][i]=1.0;
57                     a[i][(i+1)%n]=-0.5;
58                     a[i][i-1]=-0.5;
59                     a[i][n]=1;
60                 }
61             }
62             Gauss();
63             printf("%.4f\n",f[x]);
64         }
65     return 0;
66     }

原文地址:https://www.cnblogs.com/LQLlulu/p/9098009.html

时间: 2024-10-10 01:07:01

【sdut2878】Circle的相关文章

657. Judge Route Circle【easy】

657. Judge Route Circle[easy] Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this robot makes a circle, which means it moves back to the original place. The move sequence is represented by a string. And each m

【CF744D】Hongcow Draws a Circle 二分+几何

[CF744D]Hongcow Draws a Circle 题意:给你平面上n个红点和m个蓝点,求一个最大的圆,满足圆内不存在蓝点,且至少包含一个红点. $n,m\le 10^3$ 题解:我们先不考虑半径为inf的情况.显然所求的圆一定是要与某个蓝点相切的.我们可以先枚举这个蓝点,然后二分答案.当半径已知.一个点固定时,圆的可能位置只能是绕着一个点旋转得到的结果,其余的所有点都对应着极角上的一段区间,我们可以将这些区间排序,采用扫描线,看一下是否存在一段区间包含红点且不包含蓝点即可. 但是如果

【技巧】谷歌地图操作类

原文:[技巧]谷歌地图操作类 /********************************************************************************Name:谷歌地图操作类Author:刘皓Date:2012.8.13Desc:该类封装谷歌地图的一些操作version:1.0*********************************************************************************/ ///*一些全

苹果Swift编程语言入门教程【中文版】

目录 1 简介 2 Swift入门 3 简单值 4 控制流 5 函数与闭包 6 对象与类 7 枚举与结构 1 简介 Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束.Swift采用了安全的编程模式和添加现代的功能来是的编程更加简 单.灵活和有趣.界面则基于广受人民群众爱戴的Cocoa和Cocoa Touch框架,展示了软件开发的新方向. Swift已经存在了多年.Apple基于已有的编译器.调试器.框架作为其基础架构.通过ARC(Aut

【JavaScript】Object.observe()带来的数据绑定变革

Object.observe()带来的数据绑定变革 引言 一场变革即将到来.一项Javascript中的新特性将会改变你对于数据绑定的所有认识.它也将改变你所使用的MVC库观察模型中发生的修改以及更新的实现方式.你会看到,那些所有在意属性观察的应用性能将会得到巨大的提升. 我们很高兴的看到,Object.observe()已经正式加入到了Chrome 36 beta版本中. Object.observe()是未来ECMAScript标准之一,它是一个可以异步观察Javascript中对象变化的方

POJ2886 Who Gets the Most Candies? 【线段树】+【单点更新】+【模拟】+【反素数】

Who Gets the Most Candies? Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 9416   Accepted: 2868 Case Time Limit: 2000MS Description N children are sitting in a circle to play a game. The children are numbered from 1 to N in clockwise o

Apple Swift中文入门教程【转发】

1   简介 今天凌晨Apple刚刚发布了Swift编程语言,本文从其发布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的iOS&OSX开发有所帮助. Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束.Swift采用了安全的编程模式和添加现代的功能来是的编程更加简单.灵活和有趣.界面则基于广受人民群众爱戴的Cocoa和Cocoa Touch框架,展示了软件开发的新方向. Sw

【mel】

string $sel[]=`ls -sl`; float $T[]=`xform -q -ws -t $sel[0]`; float $R[]=`xform -q -ws -ro $sel[0]`; if (`exists ($sel[0]+"_Con")`==0) { delete ($sel[0]+"_Con"); } if (`exists ($sel[0]+"_Con_grp")`==0) { delete ($sel[0]+"

【ShaderToy】抗锯齿相关函数

*示例代码可以直接在ShaderToy中运行. 先上未抗锯齿的两个圆形图案,可以清楚看清图案边缘像素块,即"锯齿". 附代码: void mainImage( out vec4 fragColor, in vec2 fragCoord ) { vec2 r = 2.0*vec2(fragCoord.xy - 0.5*iResolution.xy)/iResolution.y; vec2 center1 = vec2(-0.75,0); vec2 center2 = vec2(0.75,