9.24总结

考试过程

先通读题目,刚开始对4道题的印象是T1完全没有思路,T2感觉比较可做,T3明显是动态DP,而且不是树上的,如果后面时间很多或者一直不会做其他题的话可以做一下,T4看3s很像根号分治,感觉除了T1都比较可做。然后开始看T1,老板一直在上面说最近学过的知识,想到了prufer序,但是一直不知道怎么联系起来,想了半个小时就换题了。然后看第二题求异或总和,恰好之前CF做过把每一位分开算贡献的题,于是很快想到可以DP,然后写了一会儿发现过不了样例2,发现这样会算多,于是删了一部分情况加上了一个换根DP,然后一波直接过了大样例,然后又卡了一下自己发现没有问题。已经过了一道题了,心里就放心了一点,然后花了半个小时写了个T1暴力,过了样例就没管了,然后T4想了一会儿根号分治但不知道按照什么分治,于是写了个20分暴力,搜索的时候加了个小优化,最后还有1个小时10分钟,于是赶快推T3DP方程,很快把矩阵画出来了,不过代码不太好写,幸运的是基本没有调试就过了大样例。然后检查了一遍就交了代码

估分 40+100+100+20=260

实际 5+100+100+54=259

总结

这一次考试总的来说还可以,基本打出了自己正常水平,做的好的地方在于自己时间把握还算合理,没有像某位同学一样一直思考T1。但是做的不好的地方在于还是比较随意,没有充分检查自己代码的情况下就直接不管了,导致T1只过了一个样例,其他基本什么都过不了

题解

T1:

看到在树上统计奇数偶数层实际上就是二分图,将深度为奇偶分开,于是答案就变成了左边n个点,右边m个点有多少个二分图,于是直接套文艺计算姬的柿子即可,但是由于编号除根之外可以随便选,所以还要在×一个C(n-1,m-1)

时间复杂度O(n)(预处理阶乘)

T2:

因为位运算位数之间互不影响,所以设dp[i][j][0/1]表示以i为根的子树内,所有一端为i的节点第j位上是0/1的方案数,然后递推,之后换根只需要减去之前的贡献,再加到儿子上。但是一条线段除起点终点一样外,会被计算两次,所以只需要加上suma然后除以二

时间复杂度O(n*logv)

T3:

因为位置不能上下移动,且左右移动不能往返,所以dp[i][j]的值是所有在j左边第一个障碍物到右边第一个障碍物之前所有dp[i-1][k]的总和,很容易推出一个矩阵,然后修改的时候如果是障碍的话,就会将左右分成互相不可达的两段,把这些设为0,如果是取消障碍的话,就将它左边第一个障碍到右边第一个弄成两两可达的即可。用线段树维护第2行到最后一行的乘积,注意特判n=1的情况

时间复杂度O(k* logn * m^3)

T4:

对询问根号分治,每一次开一个新的奶茶店的时候加入一个vector。如果vector的大小到了根号n就跑一次多源bfs更新答案,,同时将vector清空。每一询问暴力求vector内所有点和x的LCA(预处理欧拉序的st表可以做到O(1)LCA),最后和ans[x]取min。

时间复杂度O(n*sqrt(n))

posted @   QZJ123456  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示