zoukankan      html  css  js  c++  java
  • GDKOI 2021 提高组 Day2 第一题 游戏(解方程)

    GDKOI 2021 提高组 Day2 第一题 游戏

    题目大意

    • 0 0 0颗星开始到 n n n颗星结束,有 i i i颗星时,会有 x i x_i xi的概率升星, 1 − x i 1-x_i 1xi概率降星, i i i 0 0 0时则保持不变,求到达 n n n颗星的期望步数。
    • n ≤ 1 0 6 nle10^6 n106

    题解

    • 根据期望的线性性,可以分别求出每个从 i i i i + 1 i+1 i+1的期望步数,然后全部相加即为答案。
    • i = 0 i=0 i=0时,可以列出方程:
    • p 0 = x + ( 1 − x ) ( 1 + p 0 ) p_0=x+(1-x)(1+p_0) p0=x+(1x)(1+p0)
    • i > 0 i>0 i>0时,可以列出方程:
    • p i = x + ( 1 − x ) ( 1 + p i − 1 + p i ) p_i=x+(1-x)(1+p_{i-1}+p_i) pi=x+(1x)(1+pi1+pi)
    • 发现该形式可以从 0 0 0开始依次解出来。

    代码

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    #define ll long long
    #define md 998244353
    #define N 1000010
    int read() {
    	int s = 0;
    	char x = getchar();
    	while(x < '0' || x > '9') x = getchar();
    	while(x >= '0' && x <= '9') s = s * 10 + x - 48, x = getchar();
    	return s;
    }
    ll ksm(ll x, ll y) {
    	if(!y) return 1;
    	ll l = ksm(x, y / 2);
    	if(y % 2) return l * l % md * x % md;
    	return l * l % md;
    }
    int main() {
    	int n = read(), i;
    	ll ans = 0, la = 0;
    	for(i = 1; i <= n; i++) {
    		ll x = read(), y = read();
    		x = x * ksm(y, md - 2) % md;
    		la = (la + 1 - x * la % md + md) * ksm(x, md - 2) % md;
    		ans = (ans + la) % md;
    	}
    	printf("%lld
    ", ans);
    	return 0;
    }
    

    自我小结

    • 期望题解方程是比较一般的套路。
    • 但尽管再简单的题也要注意检查,注意模数的大小,并且注意每个地方都要记得取模,负数需改为正。
    哈哈哈哈哈哈哈哈哈哈
  • 相关阅读:
    global mapper合并多个tif影像
    arcgis 10.2 licence manager无法启动
    Error C2079 'CMFCPropertySheet::m_wndOutlookBar' uses undefined class 'CMFCOutlookBar'
    家里的技嘉B360主板win10 uefi系统安装
    vc 6.0项目转为vs 2017项目遇到 的问题
    PPT学习笔记
    git拉取分支
    将本地源码推向gitee码云
    java反编译工具使用记录
    node.js install and cecium apply
  • 原文地址:https://www.cnblogs.com/LZA119/p/14437604.html
Copyright © 2011-2022 走看看