1151 - Snakes and Ladders

Time Limit: 2 second(s)    Memory Limit: 32 MB

'Snakes and Ladders' or 'Shap-Ludu' is a game commonly played in Bangladesh. The game is so common that it would be tough to find a person who hasn't played it. But those who haven't played it (unlucky of course!) the rules are as follows. There is a 10 x 10 board containing some cells numbered from 1 to 100.

  1. You start at position 1.
  2. Each time you throw a perfect dice containing numbers 1 to 6.
  3. There are some snakes and some ladders in the board. Ladders will take you up from one cell to another. Snakes will take you down.
  4. If you reach a cell that contains the bottom part of a ladder, you will immediately move to the cell which contains the upper side of that ladder. Similarly if you reach a cell that has a snake-head you immediately go down to the cell where the tail of that snake ends.
  5. The board is designed so that from any cell you can jump at most once. (For example there is a snake from 62 to 19, assume that another is from 19 to 2. So, if you reach 62, you will first jump to 19, you will jump to 2. These kinds of cases will not be given)
  6. There is no snake head in the 100-th cell and no ladder (bottom part) in the first cell.
  7. If you reach cell 100, the game ends. But if you have to go outside the board in any time your move will be lost. That means you will not take that move and you have to throw the dice again.

Now given a board, you have to find the expected number of times you need to throw the dice to win the game. The cases will be given such that a result will be found.

Input

Input starts with an integer T (≤ 105), denoting the number of test cases.

The first line of a case is a blank line. The next line gives you an integer n denoting the number of snakes and ladders. Each of the next n lines contain two integers a and b (1 ≤ a, b ≤ 100, a ≠ b). If a < b, it means that there is a ladder which takes you from a to b. If a > b, it means that there is a snake which takes you from a to b. Assume that the given board follows the above restrictions.

Output

For each case of input, print the case number and the expected number of times you need to throw the dice. Errors less than 10-6 will be ignored.

Sample Input

2

14

4 42

9 30

16 8

14 77

32 12

37 58

47 26

48 73

62 19

70 89

71 67

80 98

87 24

96 76

0

Output for Sample Input

Case 1: 31.54880806

Case 2: 33.0476190476

主要题意就不解释了。。

我们设从点i到100的步数期望为Ei。

则:

如果Ei有连向其他格子的边,设走到to[i],则Ei=Etoi。

否则Ei=(Ex1+Ex2+...+Exk)*(1/6)+1。其中,k=min(6,100-i),x1+1=x2,x2+1=x3,......xi+1=xi+1。

但是我们发现,to[i]可能大于i,也可能小于i,所以不能直接DP或递推。

所以相当于解一个有100个100元方程的方程组。其中最后一个方程已经确定,且得到E[100]=0。

那么,就相当于用高斯消元解一个有唯一解的实数方程组了。

code:

 #include<bits/stdc++.h>
 #define Ms(a,x) memset(a,x,sizeof a)
 using namespace std;
 ;
 int n,got[N]; double a[N][N],E[N];
 ?x:-x;}
 void Gauss(int equ,int var) {
     ,col=,cho;
     for (; row<=equ&&col<=var; row++,col++) {
         cho=row;
         ; i<=equ; i++)
             if (abso(a[i][col])>abso(a[cho][col])) cho=col;
         if (cho!=row)
             ; i++) swap(a[cho][i],a[row][i]);
         ) {col--; continue;}
         ; i<=equ; i++) ) {
             double k=a[i][col]/a[row][col];
             ; j++) a[i][j]-=k*a[row][j];
         }
     }
     for (int i=var; i; i--) {
         ];
         ; j<=var; j++) re-=a[i][j]*E[j];
         E[i]=re/a[i][i];
     }
 }
 int main() {
     int T; scanf("%d",&T);
     ; ts<=T; ts++) {
         cin>>n,Ms(got,),Ms(a,),Ms(E,);
         ,x,y; i<=n; i++)
             scanf("%d%d",&x,&y),got[x]=y;
         ,c; i<; i++) if (!got[i]) {
             c=min(,-i),a[i][i]=c,a[i][]=;
             ; j<=&&i+j<=; j++) a[i][i+j]=-;
         } ,a[i][got[i]]=-,a[i][]=;
         a[][]=,a[][]=;
         Gauss(,);
         printf(]);
     }
     ;
 }

[lightoj P1151] Snakes and Ladders的更多相关文章

  1. LightOJ - 1151 Snakes and Ladders —— 期望、高斯消元法

    题目链接:https://vjudge.net/problem/LightOJ-1151 1151 - Snakes and Ladders    PDF (English) Statistics F ...

  2. LightOJ 1151 - Snakes and Ladders 高斯消元+概率DP

    首先来个期望的论文,讲的非常好,里面也提到了使用线性方程组求解,尤其适用于有向图的期望问题. 算法合集之<浅析竞赛中一类数学期望问题的解决方法> http://www.lightoj.co ...

  3. LightOJ - 1151 Snakes and Ladders

    LightOJ - 1151 思路: 将期望dp[x]看成自变量,那么递推式就可以看成方程组,用高斯消元求方程组的解就能求解出期望值 高斯消元求解的过程也是期望逆推的过程,注意边界情况的常数项,是6/ ...

  4. LightOJ 1151 Snakes and Ladders(概率DP + 高斯消元)

    题意:1~100的格子,有n个传送阵,一个把进入i的人瞬间传送到tp[i](可能传送到前面,也可能是后面),已知传送阵终点不会有另一个传送阵,1和100都不会有传送阵.每次走都需要掷一次骰子(1~6且 ...

  5. LightOJ 1151 Snakes and Ladders 期望dp+高斯消元

    题目传送门 题目大意:10*10的地图,不过可以直接看成1*100的,从1出发,要到达100,每次走的步数用一个大小为6的骰子决定.地图上有很多个通道 A可以直接到B,不过A和B大小不确定   而且 ...

  6. LightOJ - 1151 Snakes and Ladders(概率dp+高斯消元)

    有100个格子,从1开始走,每次抛骰子走1~6,若抛出的点数导致走出了100以外,则重新抛一次.有n个格子会单向传送到其他格子,G[i]表示从i传送到G[i].1和100不会有传送,一个格子也不会有两 ...

  7. Snakes and Ladders LightOJ - 1151( 概率dp+高斯消元)

    Snakes and Ladders LightOJ - 1151 题意: 有100个格子,从1开始走,每次抛骰子走1~6,若抛出的点数导致走出了100以外,则重新抛一次.有n个格子会单向传送到其他格 ...

  8. [Swift]LeetCode909. 蛇梯棋 | Snakes and Ladders

    On an N x N board, the numbers from 1 to N*N are written boustrophedonically starting from the botto ...

  9. light oj 1151 - Snakes and Ladders 高斯消元+概率DP

    思路: 在没有梯子与蛇的时候很容易想到如下公式: dp[i]=1+(∑dp[i+j])/6 但是现在有梯子和蛇也是一样的,初始化p[i]=i; 当有梯子或蛇时转移为p[a]=b; 这样方程变为: dp ...

随机推荐

  1. jQuery Mobile的默认配置项具体解释,jQuery Mobile的中文配置api,jQuery Mobile的配置说明,配置大全

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xmt1139057136/article/details/35258199 学习jQuery Mob ...

  2. 20190404 Informatic 学习一

    ETL 1. Informatic 下载 下载地址:https://edelivery.oracle.com/osdc/faces/Home.jspx,没有账号可以自己注册一个Oracle账号. 不得 ...

  3. Storm UI说明

    一.Storm ui 首页主要分为4块: Cluster Summary,Topology summary,Supervisor summary,Nimbus Configuration Cluste ...

  4. java框架之MyBatis(1)-入门&动态代理开发

    前言 学MyBatis的原因 1.目前最主流的持久层框架为 Hibernate 与 MyBatis,而且国内公司目前使用 Mybatis 的要比 Hibernate 要多. 2.Hibernate 学 ...

  5. Django配置相关及其它

    配置 模板 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ os.pat ...

  6. CSS几个要点补充

    css的font-size属性一定要带px单位,font-weight:700[千万不要带单位哦]就等于font-weight:bold加粗 1.如何像淘宝页面一样,随着浏览器的减小而保持内容区大小不 ...

  7. SQL Server 2008 报表服务入门【转】

    转http://www.cnblogs.com/YZDONET/archive/2012/08/17/2644711.html 概述 上周,Tim与我们分享了SQL Server 2008 报表服务的 ...

  8. noip单词接龙

    看了许多题解都好长啊,自不量力的来贴一下代码 (震惊于这都能ac...) 这道题的思路是先从字符串中找有重部分然后直接比较剩下的部分,比较的数据也可以用来计算数值 其实满水的题 总之看注释啦(竟然能耐 ...

  9. 记录tiny6410 jlink 命令行调试linux-2.6.38内核

    1\首先启动nandflash uboot->linux内核->文件系统,进入文件系统命令行 2\启动JLinkGDBServer -device ARM11 3\启动arm-none-e ...

  10. 深入浅出JAVA线程池使用原理2

    一.Executor框架介绍 Executor框架将Java多线程程序分解成若干个任务,将这些任务分配给若干个线程来处理,并得到任务的结果 1.1.Executor框架组成 任务:被执行任务需要实现的 ...