省选模拟104
A. 签到题
考虑第一个询问,那么要求的就是有多少个元素后面比当前元素大的第一个位置是$x$。
那么将每个位置和后面比他大的第一个位置连边,容易发现一共形成了一棵树的结构。
所以问题就是给一个节点和这个节点的所有儿子加权值,链上求和。
那么额外开一棵线段树维护加的标记即可。
B. 蓝超巨星
一个很自然的想法就是枚举第一个字符变换到了哪里,那么可以确定字符的唯一置换,然后根据每个字符和第一个字符的位置可以列出27个线性同余方程,直接解就完了。
然后的问题就是怎么判断字符的置换是否是合法的,定义字符串的hash值为每个位置减去上一个相同字符的位置乘p^k,这样如果两个字符串hash值相同就是相等的。每次查询一个子串的hash值只有每种字符的第一次出现需要变化,暴力对每一种字符修改即可。
C. 秘密行动
看到prod可以简单想到取对数转化成求和的形式,然后这个贡献的形式一看就很网络流,然后一个这么简单的图我居然建不出来。。。
显然每个位置每种质数的贡献是独立的,将每个位置拆成10个点,每个点选择有一个贡献,不选有一个贡献,某些点对选择情况的异或有贡献。
从S向每个点连边,流量是选择的贡献,从每个点向T连边,流量是不选的贡献,对于一组限制,直接在对应的两个点之间连一条流量为相应贡献的边即可。