您的位置:首页 > 其它

POJ 3744 Scout YYF I(概率+矩阵)

2013-05-04 12:33 363 查看
题目链接:http://poj.org/problem?id=3744

题意:在X坐标轴上有一些位置是陷阱。 一个人开始在1,每次向前跳一步的概率p,跳两步的概率1-p。求安全通过所有陷阱的概率。

思路:对于两个陷阱之间的设长度为L,其实就是就是从1跳到L的概率,f[0]=0,f[1]=1,f
=f[n-2]*(1-p)+f[n-1]*p。

class Matrix
{
public:
double a[2][2];

Matrix()
{
clr(a,0);
}
Matrix(double x,double y,double z,double w)
{
a[0][0]=x;
a[0][1]=y;
a[1][0]=z;
a[1][1]=w;
}

Matrix operator*(Matrix b)
{
Matrix ans;
int i,j,k;
FOR0(k,2) FOR0(i,2) FOR0(j,2)
{
ans.a[i][j]+=a[i][k]*b.a[k][j];
}
return ans;
}
};

Matrix a,b;
int n,c[15];
double p;

double get(int x)
{
if(x==0) return 0;
x--;
a=Matrix(0,1-p,1,p);
b=Matrix(1,0,0,1);
while(x)
{
if(x&1) b=b*a;
a=a*a;
x>>=1;
}
return b.a[1][1];
}

int main()
{
Rush(n)
{
RD(p);
int i;
FOR1(i,n) RD(c[i]);
sort(c+1,c+n+1);
n=unique(c+1,c+n+1)-(c+1);
double ans=1;
i=1;
while(i<=n)
{
ans*=get(c[i]-c[i-1]-1);
ans*=(1-p);
i++;
}
PR(ans);
}
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: