AtCoder Beginner Contest 231 题解(A-G)

A,B 略,C 简单二分。

ABC231D - Neighbors

建出图来,若图有环或者有点的度数大于 2 2 2,则不合法。否则合法。

ABC231E - Minimal payments

由于 A i − 1 ∣ A i A_{i - 1}\mid A_i Ai1Ai,所以对于一个 A i A_i Ai 可以只考虑两种方案:用这个 A i A_i Ai 尽可能凑,或者用更大的面值付然后要找零。

using ll = long long;
int n;
ll a[65], x, ans;
unordered_map<ll, unordered_map<ll, ll> > f;

ll dfs(ll x, int now) {
    if (now == 1) return x;
    if (f[x][now] > 0) return f[x][now];
    ll r = x % a[now], q = x / a[now], p = a[now] - r;
    if (r == 0) return q;
    ll w1 = q + 1ll + dfs(p, now - 1);
    ll w2 = q + dfs(r, now - 1);
    return f[x][now] = min(w1, w2);
}

int main() {
    read(n, x);
    FOR(i, 1, n) read(a[i]);
    ans = x;
    print(dfs(x, n));
    return output(), 0;
}

ABC231F - Jealous Two

相当于给定 N N N 个点 ( a i , b i ) (a_i, b_i) (ai,bi),问满足如下关系的 ( i , j ) (i, j) (i,j) 有多少对:

  • 1 ≤ i , j ≤ N 1\le i,j\le N 1i,jN,其中 i i i 可以等于 j j j
  • a i ≥ a j a_i\ge a_j aiaj,且 b i ≤ b j b_i\le b_j bibj

裸的二维偏序,直接上 cdq 即可。

评测记录,注意这题一定要预先将所有的点去重,否则会漏数偏序关系。

ABC231G - Balls in Boxes

期望牛逼题。大体思路就是拆开期望的式子,利用线性性进行化简。

N N N 个盒子,第 i i i 个盒子一开始有 A i A_i Ai 个球, K K K 次操作,每次操作随机选一个盒子加一个球,最后每个盒子有 B i B_i Bi 个球,问 S = ∏ B i S = \prod B_i S=Bi 的期望,对 998244353 998244353 998244353 取模。

答案为 E [ S ] E[S] E[S],令 X i X_i Xi 为表示第 i i i 个盒子被选中次数的随机变量,则我们要的最终答案就是 E [ ∏ i ( A i + X i ) ] E[\prod_i(A_i + X_i)] E[i(Ai+Xi)]。考虑 N = 2 N = 2 N=2 的情况,即为 E [ ( A 1 + X 1 ) ( A 2 + X 2 ) ] = E [ A 1 A 2 ] + E [ A 1 X 2 ] + E [ A 2 X 1 ] + E [ X 1 X 2 ] E[(A_1 + X_1)(A_2 + X_2)] = E[A_1A_2] + E[A_1X_2] + E[A_2X_1] + E[X_1X_2] E[(A1+X1)(A2+X2)]=E[A1A2]+E[A1X2]+E[A2X1]+E[X1X2]

推而广之,对于 n n n 个不一样的下标 i 1 , ⋯   , i n i_1,\cdots, i_n i1,,in,容易知道 E [ ∏ j = 1 n X i j ] = E [ ∏ i = 1 n X i ] E[\prod_{j = 1}^n X_{i_j}] = E[\prod_{i = 1}^nX_i] E[j=1nXij]=E[i=1nXi]。所以提出这个公因式,有
E [ ∏ i = 1 N ( A i + X i ) ] = ∑ n = 0 N S N , n ( A 1 , ⋯   , A N ) E [ ∏ i = 1 N − n X i ] E\left[\prod_{i =1}^N(A_i + X_i)\right] = \sum_{n = 0}^NS_{N, n}(A_1,\cdots, A_N)E\left[\prod_{i =1}^{N - n}X_i\right] E[i=1N(Ai+Xi)]=n=0NSN,n(A1,,AN)E[i=1NnXi]
其中 S N , n S_{N, n} SN,n 表示 N N N 个变量的 n n n 次对称多项式。

现在只需要对于每个 n n n 算出 S N , n ( A 1 , ⋯   , A N ) S_{N, n}(A_1,\cdots, A_N) SN,n(A1,,AN) E [ ∏ i = 1 n X i ] E[\prod_{i = 1}^nX_i] E[i=1nXi] 即可。

前者, S N , n ( A 1 , ⋯   , A N ) = [ x n ] ∏ i = 1 N ( A i x + 1 ) S_{N, n}(A_1,\cdots, A_N) = [x^n]\prod_{i =1}^N(A_ix + 1) SN,n(A1,,AN)=[xn]i=1N(Aix+1)。这个东西一个分治 NTT 碾过去应该是 O ( n log ⁡ 2 n ) O(n\log^2n) O(nlog2n) 的。

然后是后者。我们考虑随机变量 X i , j X_{i, j} Xi,j 表示第 i i i 个盒子在第 j j j 次操作是否会被选中(0/1)。则 X i = ∑ j = 1 K X i , j X_i = \sum_{j = 1}^KX_{i, j} Xi=j=1KXi,j。枚举一下下标,发现
E [ ∏ i = 1 n X i ] = ∑ j 1 , j 2 , ⋯   , j n E [ ∏ i = 1 n X i , j i ] E\left[\prod_{i = 1}^n X_i \right] = \sum_{j_1, j_2,\cdots, j_n}E\left[\prod_{i = 1}^nX_{i, j_i}\right] E[i=1nXi]=j1,j2,,jnE[i=1nXi,ji]
然后当 i 1 ≠ i 2 i_1\not= i_2 i1=i2 的时候,显然 X i 1 , j X i 2 , j = 0 X_{i_1, j}X_{i_2, j} = 0 Xi1,jXi2,j=0。故
E [ ∏ i = 1 n X i , j i ] = { ( 1 N ) n if  j i  are pairwise different 0 otherwise E\left[\prod_{i = 1}^nX_{i, j_i}\right] = \begin{cases} \left(\frac 1N\right)^n \quad& \text{if }j_i\text{ are pairwise different}\\ 0\quad& \text{otherwise} \end{cases} E[i=1nXi,ji]={(N1)n0if ji are pairwise differentotherwise
于是
E [ ∏ i = 1 n X i ] = ( ∏ i = 1 n ( K + 1 − i ) ) ( 1 N ) n E\left[\prod_{i = 1}^n X_i \right] = \left(\prod_{i = 1}^n(K + 1 - i)\right)\left(\frac1N\right)^n E[i=1nXi]=(i=1n(K+1i))(N1)n
这个可以 O ( n ) O(n) O(n) 算,于是 O ( n log ⁡ 2 n ) O(n\log^2n) O(nlog2n) 解决了,评测记录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值