2017年10月8日训练总结

这次训练总结是国庆八天。

对树状数组在一些的难一点的题目中的运用又有了新的认识和感悟。

首先是对于树状数组的离线处理有了一定的了解,并在求区间不重复数字个数和出现2次数字个数能够快速正确的写出AC代码。然而浪费了3天时间在想其他题目上,结果一道也没想出来,最后还是先去做树状数组专题的题目。另一方面看了求区间GCD个数的博客,学会了用vector<pair<int,int> >存gcd和它出现的位置,再离线处理,将询问排序。但是在做求区间最大GCD的时候,用了一个技巧,就是答案一定是某个数的因子。因此先把所有的因子都记录下来并用vector<int> vc[mx]存它是哪个数的第几个因子。离线之后枚举每个a[i],如果一个因子出现了两次就说明区间内有两个数的gcd是它,加入树状数组中,询问的区间按右端点升序排序,然后用树状数组维护区间最大值(第二次用树状数组维护区间最大值,第一次是求最长不下降子序列的时候),右端点等于i的时候从左端点往上找最大值即可。

另外做的一道题是魔法球游戏。就是给一棵树,1为根节点,每个节点都有权重,每个节点有左右孩子或者没有。一个球到每一个节点往左走还是往右走取决于球的重量和节点的权重。询问球经过某个点的概率。输出7的多少次方除以2的多少次方。如果不可能经过某个点就输出0。

思路:由于对于每个询问都唯一确定一条路径,用树状数组+搜索遍历整棵树并求解。用树状数组存哪个位置的数比它大。用树状组分别询问球重量所在位置的上下即可求出到达改点的路径里有几个比它打的和比他小的左子树和右子树。如果该路径上比它小的点和比它大的点个数和不等于总个数,那就是在它之前就停下了,记录0。用一个二维数组保存结果即可。此处用的是树状数组的回溯。。。

树状数组专题练习题中最后做的一道就是给一棵树,1为根节点,求以i为根节点的子树有多少个正好出现k次的数字。刚开始读了半天没读懂题,好不容易读懂了题意也是毫无思路。最后也是看了题解的思路,才知道把树化成一维数组,把询问的子树化成询问区间。

思路:先用hash把每个点的权值离散化,把要问的子树利用深搜化成区间,把所有的点重新排列到一维数组中记录该点的权值,记录每个要求的点的初位置和末位置即为区间左右端点。这样就变成了求子区间出现k次的数字个数。再用树状数组离线的方法,把每个区间按右端点升序排序,从第一个点开始,用数组记录权值为a[i]的点到目前为止出现了几次。若出现的次数大于等于k次,就在这个重量出现的次数-k的位置加1,若出现次数大于k次,就在就在这个重量出现的次数-k-1的位置加-2(-2而不是-1是因为如果询问的区间左端点小于那个点,那这个点的权值出现的次数就大于了k次,不应该算到结果里,于是再减一)。这样就保证了每一次询问的区间得到的都是出现k次的数的数量。然后i等于右端点的话就直接query(r)-query(l-1)就行了。在这里我用hash定义hash函数来离散化权重,但是交了4次ce,查了好久才知道hash是关键字,直接定义函数就会ce。。。看来以后hash的时候要注意了。

树状数组的专题总算做完了,也学到很多新用法,但是再遇到难度差不多的题应该还得费不少力气。。。以后在遇到的时候一定要清掉。

做了好久树状数组,线段树也快忘了。重新看课件,开始做线段树专题的题目。(国庆专题的题目有点难。。。暂时放弃了)还有大约10天的时间。抓紧时间把线段树题目刷一下,然后再看看KMP的有关知识。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值