A.QAQ
题意就是找出所有构成”QAQ”三个字母的子序列个数,听说还有统计什么的,果然蒟蒻选手只知道三个for……
代码:
1 |
|
B.Ralph And His Magic Field
题意就是给你$n$、$m$和$k$,问你构造出每一行每一列的乘积都是$k$的方案数有多少种,由于智商感人,比赛的时候没想出来
显然那每一个格子只能放$1$或$-1$,然后只要考虑$k==-1$和$k==1$两种情况即可,然后用$n*m$个元素的乘积和每行每列之间的乘积之间的关系,可以得到:
- $k==1$时答案为$2^{(n-1)*(m-1)}$,这里用费马小定理和快速乘法处理一下即可。
- $k==-1$,当$n$和$m$奇偶性不同,则答案为$0$;否则答案还是$2^{(n-1)*(m-1)}$。
代码:
1 |
|
C.Marco and GCD Sequence
题意就是给你$n$个数组成的集合,这个集合就是某个序列的所有区间$gcd$所构成的集合,构造这个数列。
Naive地以为只要相互之间$gcd$不为$1$就可以了,到最后用$ST$表暴力判断还是错的,正解就是看每一个数是不是那个最小数的倍数,如果有一个数不是的话无法构造;否则只要在两两之间插入一个最小的数就是所要构造的序列了
代码:
1 |
|
D.Ralph And His Tour in Binary Country
题意就是给你一个完全二叉树(比赛的时候看了几眼还是选择去做E了,弱比我既没看出来题目所给的就是完全二叉树,也忘记去打表了找规律了),然后每一个树边都有权值(走过路径就要减去这条路径的权值),询问从某一个点$A_i$开始,拥有初始值为$H_i$,问那些点可以在$H_i$不被扣成负数前提下能走到,并求到这些点的时候所有剩余$H_i$的和。
完全不会写,还好大佬们的代码看得懂……感觉非常巧妙的一道题,做法就是先对树上的所有节点求出它子树内的节点(记得算自己)到自己的路径长度,记录到这个节点的信息中,对于询问:考虑候选点只能来自与子树内部或子树外部,因此先处理$A_i$子树,然后再处理$A_i$的兄弟子树,然后再往上走,单独处理父亲,依次循环,直到走到整棵树的根节点$1$为止。对于子树的处理,显然在上面排好序的路径长度中二分一下最后的位置,然后哪个位置的前缀和就是所要扣掉的总值,为了避免老是作前缀和,再用一个数组再预处理的时候顺便记录下前缀和就可以了。然后记录子树路径长度的时候用归并排序和代替暴力$sort$,速度可以加快接近一倍
代码:
1 |
|
E.Ralph and Mushrooms
题意就是给你一个有向可能带环的图,每一条边都有一个所能得到的蘑菇数量,设初始蘑菇为为$w$,第$i$次走这条路,蘑菇数量会减掉$i-1$,比如一开始蘑菇有$4$个,那么这条路可被采集的蘑菇数量依次为$4,3,1,0$,然后从一个给定起点$s$出发,求最多能采集到多少蘑菇。路可以来回走,但是蘑菇一旦为$0$就不能再采集了。
说起这题很痛心,没有预处理+智商低导致终测$TLE$,做法就是先缩点成多个连通分量目的是得到一个新的$DAG$,然后根据每一条输入边连接的端点,来更新新图的边权或者新图的点权,用二分或数学的方法把连通分量(即环)里的可采集蘑菇数量求出来作为点权(用到自然数前n项和的求和公式),然后然后做一遍$dfs$记忆化搜索(用spfa没必要且容易超时)求$DAG$上的点边均带权的最长路即可。最好预处理一下自然数的前$n$项和$S_n$的前$n$项和$T_n$,否则可能会超时
代码:
1 |
|