比赛链接:https://www.bnuoj.com/v3/contest_show.php?cid=9146#info
A题
国际象棋棋盘,黑白相间染色。
B题
最大值只取决于每个连通块的大小,一个连通块大小是k,它就会让结果乘以2^(k-1)。
C题
概率dp。居然第二天又考到没看出来。设dp[i]表示i变成1的的期望次数。
dp[i]=(1/k)Σ(dp[i/j]+1)。j是i的因子。
D题
本来以为是数学公式题,后半场才发觉可以状态转移。dp[n][g][k]表示n个人分成g组,每组人数在[1,k]之间的方案数。先memset(dp,0),然后dp[1][1][k]=1。
然后dp[n][g][k]=Σdp[n-i][g-1][k], 1<=i<=k。然后用这个dp可以推出结果。
更具体一点,两个兵种的分组数量只有四种情况,ababa,babab,abab,baba。然后枚举分组数量,根据刚才的dp推一下结果。
E题
以重心为原点做极角序。
F题
对于每个查询,枚举最短边,然后做Kruskal,直到源点到汇点连通。注意多组数据。
G题
因为置换满足结合律,所以可以求出一次置换,然后做m次方的快速幂。
H题
贪心的策略模拟打牌。
I题
网上找的题解没看懂,还是用自己的笨办法吧。
能组成三角形的分为三种情况:三条边互不相等的,有两条边相等的,三条边都相等的。
对于三条边互不相等的,长度为i的有几个可以处理出来,然后用卷积处理处和为k的有几个。然后减去有相等的方案数,然后除以2,变成组合数。然后枚举最大边的长度,用卷积结果的后缀和减去不合要求的方案数(不合要求的方案数包括有一条边比这条边大、有两条边比这条边大的情况)。
对于有两条边相等的,枚举相等的两条边的长度,用树状数组求对应区间的和,然后扣除自己那一个点。
对于三条边都相等的,直接枚举边的长度。