CSP模拟12 笔记
月的最爽的一集
114514
定义 \(trans(b)\) 为满足以下条件的序列 \(b'\) 中字典序最小的序列:
1. \(\left|b' \right|\)= \(\left|b \right|\)
2. 对于所有 \(1<i<\left|b \right|\) ,有 \(b_i<=b'_i\)
给出序列 \(b\) ,求满足 \(trans(a)=b\) 的序列 \(a\) 的数量。
看起来是水题。观察到任意 \(a_i\) 的取值范围只由两项决定:
- \(i<j\) 且 \(b_i>b_j\)
这种情况下,交换 \(b_i\) 与 \(b_j\) 构成的序列字典序比序列 \(b\) 小。所以 \(b_i\) 与 \(b_j\) 一定不能被交换,即 \(a_i\) 不能满足条件 \(b_j\) ,即 \(a_i>b_j\) 。 - 对于整数 \(x\) ,满足 \(x<b_i\) 且 \(x \notin b\)
这种情况下,将 \(b_i\) 改为 \(x\) 后序列字典序变小。同理,可得 \(a_i>x\)
对于情况2,可以对每个 $ i<=n$ 暴力求出不大于 \(b_i\) 的最大的 $ x$ 。
对于情况1,可以维护一个STL::set,从右向左遍历序列 \(b\) ,每遍历到一个 \(i\) 就从已经插入到set的值中找出不大于 \(b_i\) 的最小值更新 \(a_i\) 取值范围 。最后将所有 \(a_i\) 的取值范围大小相乘得到方案数。
BUT,因为set的巨大常数导致我赛时T掉挂了60分……警示后人:记得卡常
沉默乐团
主管命令你去对 T-01-31沉默乐团 进行沟通工作。虽然它演奏的音乐很好听,但在演奏结束时,它会拿走你饭卡里所有的钱!好在你知道如何构建乐谱,如果你提供给它一份不悦耳的乐谱,它就不会为你演奏,也不会拿走你的钱了。你需要对沉默乐团进行很多次工作,所以你需要设计一个程序,计算出你能构建出多少不悦耳的乐谱。
具体地,你将会得到正整数 \(N\) 表示乐谱长度和两个序列 \(L\) 和 \(R\) 表示每个音符的频率范围。一个音符由一个正整数表示。若一个乐谱可以找到一对总和相等的真前缀和真后缀,则称这个乐谱是悦耳的。你需要计算出每个音符都在其频率范围内且不悦耳的乐谱总数。
在码字,稍等…………

浙公网安备 33010602011771号