哎,今天爆炸了,下午改完题才知道自己犯了什么错误,第二题少了一句话挂了70pt,真的不应该,以后每天要想好后再打.
T1
今天的T1是考了一个快速幂+费马小定理,式子变换一下就变成了aab−1 求这个式子的值,观察数据范围显然是要loga+logb的,thkkk大佬眼杀的水题,蒟蒻想了好久都没想出来.我们发现把式子右上角的ab−1变换为k×(p−1)+c带入原式原式就变为ak×(p−1)+c ,再变一下就是ak×(p−1)×ac根据费马小定理:a(p−1)≡1(modp)上面那个式子左边是1,我们不需要算,我们只需要算出ac,对于ac的话,直接用a(b−1)mod(p−1)就好了,最后答案就是qpow(a,qpow(a,b-1,mod-1),mod).
T2
第二题是一道水题,要你求连续的一段序列使它和为奇数,并且要最小,不难想到用前缀和,分为奇数前缀和,和偶数前缀和,然后用两个set维护每次找前驱就好了,mmp少了一句话调了一上午,set要记得lower_bound的时候要注意是不是begin()的位置,以后一定注意!
T3
这道题算是今天最难的一道题了,正好戳中了我的弱点:树型dp,最近要多练练树p了.
给定一棵树,求将其分成若干段,每段有且仅有一个被标记结点的方案数。 显然是个树p,我们设g[x]表示.以x为子树的时候,他和他的子节点只有一个被标记的方案数,f[x]跟其定义相反,我们不难发现转移方程是这样子的 对于当前节点是被标记的点: f[x]=0,g[x]=∏c∈SONf[c]+g[c] 对于当前节点是未被标记的点: f[x]=∏c∈SONf[c]+g[c],g[x]=∑c∈SON(g[c]∗∏c′∈SON,c′≠c(f[c′]+g[c′])) dfs一遍就好了.经验与不足
set记得注意边界,以后晚上要休息好,不然上午脑袋里一片浆糊,加油练习树p,加油.