^ A ^ B ^ C ^ D ^ E ^ F ^ | + | + | + | O | O | | rank:1125 =====A===== * 题意:过水已隐藏。 * 题解:同上 =====B===== * 题意:大意就是给出一些字符串,选出三个符合条件的字符串,有多少种方案。 * 题解:只需要暴力枚举map记录一下即可,但是不要重复算了再除一下去重,不然会被卡常。 =====C===== * 题意:补全一个已经位置已经给出的$1$到$n$的排列,要求相邻且奇偶不同的对数最少。$(n \le 100)$ * 题解:其实dp一下就可以,我想复杂了去贪心:相当于有很多空区间,分为两端都是奇数、两端都是偶数、两端奇偶不同,第三种无论怎么填都可以保证对答案贡献是$1$,所以优先让前两种的贡献小,前两种如果不用相同奇偶性的填满就会产生贡献$2$,否则贡献为$0$,因此贪心一下即可。但是最麻烦的是没有考虑两端,其实只需要钦定第$0$和$n+1$的奇偶性,枚举下四种情况取最小值即可。 =====D===== * 题意:构造一棵树,树的形态已给定,每个节点给定一个权值$c_i$,要求给每个点再赋一个权值$a_i$,使得每个点的$a_i$在它的子树中第$c_i$大。要求$a_i$是$1$到$10^9$的整数,或判断无解。 * 题解:只要确定这$n$个点的大小关系然后离散化一下就可以实现权值都是整数了。因此我们给每个叶子节点随机一个浮点权值,然后对非叶子节点将它子树中其它点排序一下,将自己插在对应位置,因为是浮点数所以可以插进去,随机化保证了不会出现精度误差。最后离散化即可。 =====E===== * 题意:交互题。有一个固定的长度为$n$的字符串,你需要通过询问来得到这个字符串。每次可以询问任意一个子串,返回这个子串的所有子串,但是返回的所有字符串的总体顺序不定,而且对于每个字符串也会进行打乱。第一问要求所有返回子串的数量不超过$(n+1)^2$,第二问要求所有返回子串的数量不超过$\left\lceil 0.777(n+1)^2 \right\rceil$。$(1 \le n \le 100)$ * 题解:考虑第一问,我们先访问$s[2..n]$,将所有子串各自排序后塞进multiset,再询问$s[1..n]$,可以看出多了$n$个前缀,而且长度严格单增,我们依靠multiset求出这多出的$n$个前缀即可还原原字符串。第二问这个方法返回的子串数量过多,我们可以用同样的方法先得到$s[1..\lceil\frac{n}{2}\rceil]$,然后再询问一次$s[1..n]$,设$f_{i,j}$为长度为$i$的子串中字符$j$出现的次数,那么$f_{i,j}-f_{i-1,j}$就是字符$j$在$s[i..n+1-i]$中出现的次数(证明大致就是长度为$i$的子串每次都比长度为$i-1$的子串多一个字符,但是最后长度为$i-1$的子串的数量比长度为$i$的子串多一个,两者之差就是字符$j$在$s[i..n+1-i]$中出现的次数),因此我们倒序枚举$i$即可还原出原字符串中的后一半。 =====F===== * 题意: * 题解: