首页 > 其他分享 >AT_abc326_e Revenge of "The Salary of AtCoder Inc." 题解

AT_abc326_e Revenge of "The Salary of AtCoder Inc." 题解

时间:2023-10-31 10:24:08浏览次数:54  
标签:Salary AtCoder ch int 题解 abc326 取值 MOD

AT_abc326_e Revenge of "The Salary of AtCoder Inc." 题解

一道简单的概率论+动态规划题目(然而我赛时没看这道题

题意

有一个长度为 \(n\) 的序列 \(A\)、一个 \(n\) 面骰子,掷若干次骰子,如果这一次掷骰子的点数小于等于上一次的点数,则结束。

定义这若干次掷骰子的总的结果为,每次掷出的点数 \(x\) 对答案的贡献为 \(A_x\)。

求最终结果的期望值对 \(998244353\) 取模。

分析

回忆高中数学(数学期望的公式

\(E(X)=\sum\limits_{k=1}^\infty x_kp_x\),其中 \(x_k\) 为 \(X\) 的一个取值,\(p_k\) 为此取值对应的概率。

而在本题中,显然的 \(A_x\) 即为取值,而我们要求的则是其对应的概率 \(p_k\)。

考虑动态规划解决,显然的:

对于一个下标 \(x\),它可能从小于它的任意一个转移过来,即取值一定严格递增。

于是有转移式:\(p_i=\sum\limits_{j=0}^{i-1}(\frac{1}{n}p_j)\),其中 \(\frac{1}{n}p_j\) 表示计入 \((j\to i)\) 的贡献。

整理一下就是:\(p_i=\frac{1}{n}\sum\limits_{j=0}^{i-1}p_i\),可以使用一个变量滚动解决。

代码

评测记录:https://atcoder.jp/contests/abc326/submissions/47082411

#include <bits/stdc++.h>

using namespace std;

using ll = long long;

const int MOD = 998244353;

#define rr read()
inline int read() {
    int num = 0, flag = 0, ch = getchar();
    for (; !isdigit(ch); ch = getchar()) flag |= ch == '-';
    for (; isdigit(ch); ch = getchar()) num = (num << 1) + (num << 3) + ch - '0';
    return flag ? -num : num;
}

inline ll qpow(ll a, int b, ll p) {
    ll r = 1;
    for (; b; b >>= 1, a = a * a % p) if (b & 1) r = r * a % p;
    return r;
}

signed main() {
    int n = rr, inv = qpow(n, MOD - 2, MOD);
    ll r = 0, p = inv; while (n--)
        r = (r + rr * p) % MOD, p = (p + p * inv) % MOD;
    printf("%lld\n", r);
    return 0;
}

标签:Salary,AtCoder,ch,int,题解,abc326,取值,MOD
From: https://www.cnblogs.com/RainPPR/p/solution-at-abc326-e.html

相关文章

  • AT_abc326_f Robot Rotation 题解
    AT_abc326_fRobotRotation题解经典问题,以前遇到过一个类似的问题:[ABC082D]FTRobot。建议对比着看一看这两道题,是两种不同的思路。(那一道题不用输出方案,因此可以用bitset优化;而此题需要输出方案,因此需要双向搜索。思路注意到每次只能「左转」和「左转」。所以,偶数次走......
  • AT_abc325_f Sensor Optimization Dilemma 题解
    AT_abc325_fSensorOptimizationDilemma题解Date20231025:修复手滑公式\(\min\)、\(\max\)写反了。动态规划。类似背包问题。朴素算法记\((x,y)\)表示使用\(x\)个(1)传感器、\(y\)个(2)号传感器。设\(f(t,i,j)\)表示覆盖前\(t\)个区间,使用\((i,j)\)传感......
  • AT_abc325_g offence 题解
    AT_abc325_goffence题解一道不难但是需要想一想的区间DP。有一个比较复杂的例子:ooofofxxx,简单的分析可知,一个of后面删除多少,与其前、后都有关,于是考虑区间DP。想到这里,其实问题已经解决一半了。状态设计设\(f(l,r)\)为闭区间\([l,r]\)经过操作之后的最小长度。注......
  • AtCoder Beginner Contest(abc) 311
    B-VacationTogether难度:⭐题目大意给定n个人的工作计划,'o'表示这天休息,'x'表示工作;请找出一段最长的所有人都休息的连续休息的天数;解题思路数据不大,暴力即可;神秘代码#include<bits/stdc++.h>#defineintlonglong#defineIOSios::sync_with_stdio......
  • [CSP-S2020] 儒略日 题解
    [CSP-S2020]儒略日今儿终于做掉困扰多年的题目了,其实想好细节也不难。容易发现儒略历和格里高利历的润年判断方式不一样,并且中间有消失的十天,计算起来相当不方便。所以我们可以首先计算出\(-4713.1.1\)~\(1582.10.4\)会经过多少天,可以通过一天一天暴力跳的方法计算出需要\(......
  • AtCoder Beginner Contest 321(ABC321)
    A.321-likeChecker直接模拟。CodeB.Cutoff直接暴力枚举\([0\sim100]\),每次把第\(n\)个数当作当前枚举的\(i\),然后看看条件是否满足。CodeC.321-likeSearcherDescription给你一个\(K\),求出\([1\simK]\)区间内有多少个321-likeNumber。321-likeNumber的......
  • P4309 [TJOI2013] 最长上升子序列题解
    P4309[TJOI2013]最长上升子序列题解正文单调队列?单调锤子队列!!本题的操作可以省略成:单点修改区间查询好极了,此时我们有两种选择:线段树和树状数组,(平衡树,真不会,下一位因为不需要其他操作,所以我们还是选择更小巧更可爱的树状数组吧。关于vectorvector的insert操作支......
  • Atcoder Beginner Contest 326 (ABC326)
    不知道为什么拖到现在,我是摆怪。A.2UP3DOWN模拟,略。B.326-likeNumbers模拟,略。C.Peak双指针板子。D.ABCPuzzle基础dfs。但是赛时不知道为什么觉得状态数不会很少,于是写了一个巨大复杂的状压。这里粗略算算有效状态数:仅考虑每行的限制,有\(\binom{3}{5}=10\)种选......
  • 题解 ABC326G【Unlock Achievement】
    题解ABC326G【UnlockAchievement】problem有\(n\)项属性,第\(j\)个属性的等级\(l_j\)初始为\(1\),每提升一级花费\(c_j\)的钱。又有\(m\)项成就,第\(i\)项成就要求对于所有\(1\leqj\leqn\),都要\(l_j\geqL_{i,j}\),如果满足所有要求,获得\(a_i\)的钱。求你最多......
  • ADASTRNG - Ada and Substring 题解
    ADASTRNG-AdaandSubstring题解题目描述给定一个小写字符串。输出\(26\)个数,代表以\(\texttt{a}\sim\texttt{z}\)开头的本质不同的子串个数。题目分析高度数组模板题。可以想到将以每个字符开头的本质不同的子串数目转化为:以每个字符开头的所有字串数目减去以每......