首页 > 其他分享 >Atcoder Beginner Contest 276(A~G)

Atcoder Beginner Contest 276(A~G)

时间:2022-11-08 11:22:39浏览次数:34  
标签:牌堆 Atcoder le 卡片 Beginner 隔板 sum num 276

赛时

A 简单字符串处理;B 简单 vector 处理;C 找上一个排列。

D 找到每一个数因子 \(2\) 的个数和 \(3\) 的个数,并判断除去这些因子之后剩下的值是否相同,若不同则不能满足条件;否则计算使得所有数都只含有最少的因子 \(2、3\) 的操作总数即可。

E 从起点向周围 dfs 即可,有些白给。

F 递推处理每一张卡片加入牌堆时对于答案的贡献即可。我们设 \(dp_i\) 表示前 \(i\) 张卡片在牌堆中时所有操作的价值之和,则将价值之和除上 \(i^2\) 即为前 \(i\) 张卡片在牌堆中时所有操作的价值期望。

考虑当第 \(i\) 张卡片加入牌堆中时,增加的可能的操作一定是选一张第 \(i\) 张卡片,再选一张其它卡片。设另一张卡片为第 \(j\) 张卡片,则当 \(a_j\le a_i\) 时,我们本次操作的贡献就是 \(a_i\);当 \(a_j>a_i\) 时,我们本次操作的贡献就是 \(a_j\)。所以我们可以用两个数据结构分别支持查询一个区间的值的个数以及所有值的和,每次动态加入一个卡片时,先对两个数据结构分别作一次查询,合并信息,再将 \(a_i\) 插入数据结构中即可。

注意当 \(j<i\) 时,\((i,j)\) 和 \((j,i)\) 会对答案造成两次贡献;当 \(j=i\) 时,数对 \((i,j)\) 也会对答案造成一次贡献。这些都需要在递推的过程中考虑到。

然后由于对于组合数学不太敏感,赛时 G 就白给了没做出来,有点感觉但还是不会写.jpg


赛后

G 其实就是简单组合数,考虑用隔板法差分表示 \(n\) 张卡片的值,设 \(B\) 为 \(A\) 的差分序列,则题目中的约束条件就可以转化为:

  • \(\forall i\in[2,n],b_i\equiv1\ \text{or}\ 2\ (\bmod 3)\).
  • \(\sum_{i=1}^nb_i\le m\)

我们不妨先假设 \(b_i\) 对 \(3\) 取模的余数也为 \(1\) 或 \(2\),则现在要做的其实就是给 \(n\) 个隔板区间都分配一个 \(1\) 或 \(2\),再找出剩下的 \(3\) 的数量,分配给每一个区间,统计分配方案数。

我们不妨枚举 \(2\) 的数量 \(x\),则 \(1\) 的数量就是 \(n-x\),剩下的 \(3\) 的数量就是 \(num=\left\lfloor\frac{m}{n+x}\right\rfloor\) ,然后再用隔板法将 \(3\) 分给每一个 \(b_i\),但是注意 \(3\) 不一定会分完,所以不妨再多加一个隔板,将剩下的 \(3\) 分到最后一个隔板的右侧去,则根据隔板法的套路,这部分的总方案数就是:

\[\sum_{x=0}^n[n+x\le m]C_{n}^x\times C_{num+n}^n \]

然后在令 \(b_1\) 强制为 \(0\),再做一遍组合数,这部分的答案为:

\[\sum_{x=0}^{n-1}[n+x\le m]C_{n-1}^x\times C_{num+n}^n \]

然后将两部分的答案合起来即可。

Ex 好像是恶臭高消一类的东西,不懂,不想补。


启发

比赛隔了两天了,启发被老鼠偷走了~

标签:牌堆,Atcoder,le,卡片,Beginner,隔板,sum,num,276
From: https://www.cnblogs.com/ydtz/p/16869060.html

相关文章

  • AtCoder Beginner Contest 276
    A-Rightmost#include<bits/stdc++.h>usingnamespacestd;int32_tmain(){strings;cin>>s;for(inti=s.size();i>=1;i--)i......
  • [数学记录]abc276G Count Sequences
    题意:对满足以下条件的序列计数,膜\(998244353\):\(0\leqa_0\leqa_1\cdots\leqa_n\leqm\)$a_i\not\equiva_j\pmod3$这题的难点在于发现它是简单题。想了......
  • AtCoder Regular Contest 070&071
    ARC070只会个DQAQ,所以就合并到ARC071了。ARC070D-NoNeed给定\(n\)个整数\(a_1\sima_n\),对于\(a_i\),若原来所有包含\(a_i\)且和\(\geK\)的子集去掉\(......
  • pat春季模拟考试+acwing第76周赛+AT276
    pat:模考58分,相较夏季赛差了不少1.模拟给定一个字符串,要求按照得分点和失分点进行模拟,求最后得分即可模拟比较难写参考小柳学渣大神的代码,大神码风和思路都很好1#i......
  • ABC276
    ABC276tasks\(\color{Green}{★}\)表示赛时做出。\(\color{Yellow}{★}\)表示赛后已补。\(\color{Red}{★}\)表示\(\text{Tobesolved}\)。Contestrk:708th......
  • AtCoder Beginner Contest 276
    今天来讲解一下AtCoderBeginnerContest276 C和D传送地址:https://atcoder.jp/contests/abc276一. C-PreviousPermutation题目大意:给你一个有数字1~n组成的序列......
  • AtCoder Beginner Contest 276
    咕咕咕咕。E-RoundTrip如果存在某个点双满足这个点双包含起点且点双大小大于\(4\)则有解。F-DoubleChance考虑不断在之前的基础上在末尾添加一个数,每次更新期......
  • AtCoder Beginner Contest 276 A~G 题解
    今天凌晨CFD题差一句判断AC,晚上ABCG题把插板法和快速幂搞混差点AC。事不过三,再这样一次我直接紫砂。太简单的题就不放翻译和代码了。(事实上这场A-E都是大水题......
  • 【atcoder abc276 】(a* 搜索)
    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.util.*;/****@autho......
  • Atcoder Beginner Contest ABC 275 Ex (H) Monster 题解
    先明确\(a_i\)是一个怪物的血量,\(b_i\)是攻击的代价。发现如果我们想攻击一个怪物,不如找出一个极大的包含它的区间,满足这个区间内所有怪物的攻击代价都不大于它本身的代价,......