[CTSC2018]假面】的更多相关文章

BZOJ5340: [Ctsc2018]假面 https://lydsy.com/JudgeOnline/problem.php?id=5340 分析: 背包,只需要求\(g_{i,j}\)表示强制活第\(i\)个人一共活了\(j\)个人的概率,\(f_j\)表示活了\(j\)个人的概率 . 这个东西有\(g_{i,j}=f_{j}-g_{i,j+1}\times p_i/(1-p_i)\) 转移即可,有小细节. \(p_i\)可能为\(0\)使得没有逆元,不过此时答案一定为\(0\). 在计算…
题目链接 LOJ 2552 Luogu P4564 考场上这道题我先是写了个70分暴力,然后发现似乎可以NTT,然鹅问题是--我没学过NTT,遂脑补之,脑补出来了,下午出成绩一看,卡成暴力分(70)--同是\(O(Qk^2\log k)\),学姐的拉格朗日什么玩意就能过TAT--学姐太强了-- 遂不忿,今天上午重写NTT,努力卡常,卡不进去-- 那还是写正解吧. 首先,发现血量上限很少,0操作时,暴力维护每一时刻每个人是每种血量大小的概率即可. 1操作怎么办呢?设\(alive_i\)是\(i\…
LINK 思路 首先考虑减血,直接一个dp做过去,这个部分分不难拿 然后是\(op=1\)的部分 首先因为要知道每个人被打的概率,所以需要算出这个人活着的时候有多少个人活着时概率是什么 那么用\(g_{i,j}\)表示第i个人还活着的时候还有其他的j个人活着的概率 这个东西暴力DP是\(n^3\)的 那么可以考虑优化,用\(f_{i,j}\)表示前i个人有j个人活着的概率 有转移:\(f_{i,j}=f_{i-1,j-1}*(1-p_i)+f_{i-1,j}*p_i\),其中\(p_i\)表示第…
题目 先来考虑一下第一问,血量有\(P\)的概率减\(1\) 由于我们最后需要求每一个人的期望血量,于是考虑维护出每个人处于不同血量时候的概率 一个简单\(dp\)即可 \[dp_{i,j}=dp_{i,j+1}P+dp_{i,j}\times (1-P)\] \(dp_{i,j}\)表示第\(i\)个人血量为\(j\)的概率 第二问,发现概率的选中的人中的存活人数有关 于是每一个人只有两种状态,生或者是死,我们考虑求出每种存活人数对应的概率是多少 显然这里我们有一个这样的\(dp\) \[f_…
https://www.lydsy.com/JudgeOnline/problem.php?id=5340 https://www.luogu.org/problemnew/show/P4564 https://loj.ac/problem/2552 (这送分题我写不出来……我退役吧) 也懒得写题解了,看https://kelin.blog.luogu.org/solution-p4564吧. 什么你说op=1的你没听懂,那你可能和我一样了(握手(大雾. 那么遵从原题解的命名,f[u][i]表示…
Description 题面 Solution 生命值范围比较小,首先维护每一个人在每个血量的概率,从而算出生存的概率,设为 \(a[i]\) 询问时,只需要考虑生存的人数,可以 \(DP\) 设 \(g[i][j]\) 表示前 \(i\) 个人活了 \(j\) 个的概率 \(g[i][j]=g[i-1][j-1]*a[i]+g[i-1][j]*(1-a[i])\) 那么考虑每一个人时,我们对其他人做这个 \(DP\) 就行了,可以做 \(O(C*n^3)\) 实际上这是个生成函数 \((a[i…
题目链接 BZOJ5340 题解 我们能很容易维护每个人当前各种血量的概率 设\(p[u][i]\)表示\(u\)号人血量为\(i\)的概率 每次攻击的时候,讨论一下击中不击中即可转移 是\(O(Qm^2)\)的 现在考虑一下结界 如果我们设\(f[u][i]\)表示除了\(u\)还存活\(i\)个人的概率 那么 \[ans[u] = (1 - p[u][0]) \sum\limits_{i = 0}^{k - 1} \frac{f[u][i]}{i + 1}\] 所以我们只需计算\(f[u][…
考场上以为CTSC的概率期望题都不可做,连暴力都没写直接爆零. 结果出来发现全场70以上,大部分AC,少于70的好像极少,感觉血亏. 设a[i][j]表示到当前为止第i个人的血量为j的概率(注意特判血量为0的情况).那么a[i][0]则为这个人的死亡率. 设dp[i]表示当前指定集合中,有i个人存活的概率. 可以发现a[][]和是可以推导出dp[]的,直接DP可以得到70分.同时发现dp[]存在逆变换,所以复杂度就可以通过了. 但是如果写丑了还是会被卡掉,优化方法可以加快读,减少取模次数,以及预…
题目大意 有\(n\)(\(n\leq200\))个非负整数\(m_1,m_2,...,m_n\)(\(\forall i\in[1,n],m_i\leq100\)),有\(q\)(\(q\leq2*10^5\))个操作,每个操作是以下两种之一: (1)给出位置\(x\),概率\(q\),若\(m_x\)大于0,则有\(q\)的概率将\(m_x\)减一:若\(m_x\)为0,则不进行任何操作 (2)给出一个数\(k\)和\(k\)个不重复的位置\(d_1,d_2,...d_k\),在\(m_{d…
传送门 \(Q \leq 200000 , C \leq 1000 , m_i \leq 100\)-- 先考虑如何维护最后一次操作时所有人的血量期望.不难发现我们需要的复杂度是\(O(Qm_i)\)的,所以不难想到一个Easy的DP:设\(f_{i,j}\)表示当前操作结束后第\(i\)个人血量为\(j\)的概率,转移考虑技能是否命中. 然后考虑结界的释放.注意到结界是否释放到每一个人只和TA和其他人是否存活有关,而和血量无关.所以考虑枚举每一个人,在TA存活的前提下再设一个DP:\(g_{i…