2020.07.17【NOIP提高组】模拟反思总结

还行,197分,Rank.7
【T1】
Decription
这一道题用了我好久。看到题,我一下就想到是用树型dp,转移时用插板问题。但是我对插板问题不是很熟悉,搞得我先是想了接近一个小时,调了一个小时。好险功夫不负有心人,成功地把样例都过了,最后AC100。以后一定要把每一个知识点都学透、熟悉。设 为做完以 根的子树排序有多少种方案。

那么根据插板问题就可以得出转移方程:

最后根据费马小定理求出C即可。预处理阶乘,用快速幂求出C。

(注:附上费马小定理。a^(p-1)≡1(mod p) a的逆元即为a^(p-2))

期望得分:100
实际得分:100
【T2】
Decription
比赛时没有看懂题,被样例的恐怖迷惑了双眼。其实就是如果答案为负数,那么就加上一个p。最后听了题后才知道解法是首先判断输入的序列的负数的个数,如果是偶数,意思就是说现在序列的乘积是正数,那么我们就要尽量让一个数变成负数,也就可以让乘积变成负数,就是把绝对值最小的数把它从正数变成负数,从负数变成正数。如果无法更改任何一个数的符号,那么就直接输出尽量更改出来的序列的乘积。

如果更改了一个数的符号,那么就用一个小根堆,把这些数的绝对值存起来,不断地取堆顶,加大它的绝对值(这样乘积就会更小),然后更新堆顶,直到没有次数了为止。最后输出整个堆里的数的乘积。
【T3】
Decription
比赛时就已经有思路了,本来只能拿76分,但是数据太水,打了表就变成了97分。
我的思路:先用Prim或Kruskal求出最小生成树(这样可以拿40分)。判断方案,就把最小生成树里得出来的边删掉,删掉后再跑n-1遍最小生成树,看一下得出来的答案是否和最优答案相同,如果相同,则输出‘No’,否则输出‘Yes’。

不过这只能那76分左右,因为只有‘Yes’和‘No’,所以m>2000的数据我们直接输出‘No’,这样打表就能拿97分。

(注:这只是我自己的方法,只能拿97分)

正解就是做一遍Kruskal,在合并两个集合时,找一找有没有和这条边长度相同也是连接这两个集合,如果有,那么答案也就是‘Yes’,否则为‘No’。

期望得分:76
实际得分:97
【总结】1、以后一定要合理调配时间。
2、遇到取模的题答案如果是负数那么还要加上模数。
3、以后也要像今天一样好好地思考每一道题。
各位巨佬加油!

你可能感兴趣的:(树型dp,堆,最小生成树)