• 23.8.17 杭电暑期多校10部分题解


    1004 - Do You Like Interactive Problems?

    题目大意

    给定一个 n n n,存在一个 x ∈ [ 1 ,   n ] x\in[1,\space n] x[1, n],每次猜测你将进行随机一个 y ∈ [ 1 ,   n ] y\in[1,\space n] y[1, n],每次猜测会告诉你 x < y xx<y x > y x>y x>y x = y x=y x=y,当你猜到 x x x 或者只剩下一个数符合条件时停止猜测,问在 x x x 随机的情况下,你的期望猜测步数

    解题思路

    可以通过打表找规律来得出正解

    不难发现答案就是 2 ∗ n − 1 3 \frac{2*n-1}{3} 32n1 n = 1 n=1 n=1 时需要特判

    接下来进行验证

    1 < x < n 11<x<n

    其实只有猜测到两个相邻点 x − 1 x-1 x1 x + 1 x+1 x+1 或者猜测到 x x x 时才能结束

    假定以下几种状态

    第一种状态:已经猜测到过两个相邻点或者猜测过 x x x,期望步数为 0 0 0

    第二种状态:已经猜测到其中一个相邻点,再猜测到另一个或者 x x x 会转移到第一种状态,期望步数为 1 / ( 2 / n ) = n / 2 1/(2/n)=n/2 1/(2/n)=n/2

    第三种状态:两个相邻点和 x x x 都没猜测到过,等价于初始状态

    在第三种状态下,如果猜测到 x x x 会转移到第一种状态,概率为 1 / n 1/n 1/n

    如果猜测到两个相邻点的其中一个则会转移到第二种状态,概率为 2 / n 2/n 2/n

    因此我们所求的答案 E = 1 / n ∗ 0 + 2 / n ∗ n / 2 + ( n − 3 ) / n ∗ E + 1 E=1/n*0+2/n*n/2+(n-3)/n*E+1 E=1/n0+2/nn/2+(n3)/nE+1

    解得 E = 2 n / 3 E=2n/3 E=2n/3

    x = 1 x=1 x=1 x = n x=n x=n

    与上面所说的第二种状态类似,因此期望步数为 n / 2 n/2 n/2

    综上,最后答案为 ( n − 2 ) / n ∗ 2 n / 3 + 2 / n ∗ n / 2 = ( 2 ∗ n − 1 ) / 3 (n-2)/n*2n/3+2/n*n/2=(2*n-1)/3 (n2)/n2n/3+2/nn/2=(2n1)/3

    code

    #include 
    #define int long long
    using namespace std;
    const int MOD = 998244353;
    int t, n;
    int pw(int a, int b) {
        int res = 1;
        while (b) {
            if (b & 1) res = res * a % MOD;
            a = a * a % MOD;
            b >>= 1;
        }
        return res;
    }
    signed main() {
        ios::sync_with_stdio(0);
        cin.tie(0);
        cin >> t;
        while (t --) {
            cin >> n;
            if (n == 1) {cout << 0 << '\n'; continue;}
            cout << (2 * n - 1) % MOD * pw(3ll, MOD - 2) % MOD << '\n';
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    SSM之spring注解式缓存redis
    什么是相对URL和绝对URL
    Java “constant string too long” 编译错误
    Java#28(集合进阶1---单列集合)
    Java内存区域速览
    python 文创产品商城推荐网上购物系统设计与实现vue
    软件工程与计算总结(二)软件工程的发展
    Rust 函数
    为什么 Python 适合初学者?如何开始学习 Python?
    HCIP第十五天笔记
  • 原文地址:https://blog.csdn.net/weixin_44346868/article/details/132974364