G
N
I
D
A
O
L

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\) 的取值范围只由两项决定:

  1. \(i<j\)\(b_i>b_j\)
    这种情况下,交换 \(b_i\)\(b_j\) 构成的序列字典序比序列 \(b\) 小。所以 \(b_i\)\(b_j\) 一定不能被交换,即 \(a_i\) 不能满足条件 \(b_j\) ,即 \(a_i>b_j\)
  2. 对于整数 \(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\) 表示每个音符的频率范围。一个音符由一个正整数表示。若一个乐谱可以找到一对总和相等的真前缀和真后缀,则称这个乐谱是悦耳的。你需要计算出每个音符都在其频率范围内且不悦耳的乐谱总数。

在码字,稍等…………

posted @ 2025-08-16 21:45  MagicalGirl_MH  阅读(38)  评论(3)    收藏  举报