zoukankan      html  css  js  c++  java
  • [题解]牛客小白月赛16I 石头剪刀布

    屯了快十天的题终于做掉了真是令人快乐啊

    本来想用CSDN的富文本编辑器的,但是刚开始打就觉得好不爽,所以只能用cmd苟一下了

    题目

    传送门


    题目描述

    n个格子,一开始位于1号位置,剪刀石头布

    • 赢的概率为A,向前走一步
    • 平的概率为B,不动
    • 输的概率1-A-B,后退一步
      问走到n期望玩几局

    分析

    (f[i])为:当前位于i位置,期望玩几局到n
    显然,(f[n]=0)
    而由于1号位置在最左边,所以要么剪赢右走一步,要么不动
    (f[1]=A * f[2]+(1-A) * f[1]+1)
    对于(2 leq i leq n,f[i]=A * f[i+1]+B * f[i]+ (1-A-B) * f[i-1]+1)

    那么可以得到
    (f[x]=egin{cases} & ext {A * f[2]+(1-A) * f[1]+1 ,} x=1 \ & ext{A * f[i+1]+B * f[i]+ (1-A-B) * f[i-1]+1, } 2 leq x leq n\ & ext{0 ,} x=n end{cases})

    (f[x])移到一边,就可以得到n个方程,对这n个方程跑一遍高斯消元,得到答案


    代码
    #include<bits/stdc++.h>
    #define rep(XX,AA,BB) for(int XX=AA;XX<=BB;XX++)
    #define tep(XX,AA,BB) for(int XX=AA;XX>=BB;XX--)
    #define mem(X,Y) memset(X,Y,sizeof(X))
    #define LL long long
    const int MOD=1e9+7;
    const int N=110;
    using namespace std;
    
    int n;
    LL A,B,a[N][N],ans[N];
    
    LL KSM(LL x,LL y){
    	LL res=1;
    	while(y){
    		if(y%2==1)res=res*x%MOD;
    		x=x*x%MOD;
    		y/=2;
    	}
    	return res;
    }
    
    LL DIV(LL x,LL y){
    	return x*KSM(y,MOD-2)%MOD;
    }
    
    LL DEC(LL x,LL y){
    	return (x-y+MOD)%MOD;
    }
    
    void GS(){
    	rep(now,1,n){
    		int mx=now;
    		rep(i,now+1,n)if(a[mx][now]>a[now][now])mx=now;
    		swap(a[now],a[mx]);
    		tep(i,n+1,now)a[now][i]=DIV(a[now][i],a[now][now]);
    		rep(i,now+1,n){
    			tep(j,n+1,now)a[i][j]=DEC(a[i][j],a[now][j]*a[i][now]%MOD);
    		}
    	}
    	tep(i,n,1){
    		ans[i]=a[i][n+1];
    		rep(j,i+1,n)ans[i]=DEC(ans[i],a[i][j]*ans[j]%MOD);
    	}
    	printf("%lld
    ",ans[1]);
    }
    
    void SOLVE(){
    	mem(a,0);
    	a[1][1]=A;a[1][2]=DEC(0,A);a[1][n+1]=1;
    	rep(i,2,n-1){
    		a[i][i]=DEC(1,B);
    		a[i][i+1]=DEC(0,A);
    		a[i][i-1]=DEC(A+B,1);
    		a[i][n+1]=1;
    	}
    	GS();
    }
    
    int main(){
    	scanf("%d%lld%lld",&n,&A,&B);
    	SOLVE();
    	return 0;
    }
    
  • 相关阅读:
    C# 不用添加WebService引用,调用WebService方法
    贪心 & 动态规划
    trie树 讲解 (转载)
    poj 2151 Check the difficulty of problems (检查问题的难度)
    poj 2513 Colored Sticks 彩色棒
    poj1442 Black Box 栈和优先队列
    啦啦啦
    poj 1265 Area(pick定理)
    poj 2418 Hardwood Species (trie树)
    poj 1836 Alignment 排队
  • 原文地址:https://www.cnblogs.com/SCL123/p/11217852.html
Copyright © 2011-2022 走看看