NOIP模拟赛 Day2总结 (无题面)

我的最大缺点是思维混乱,特别是做数学题,变量的含义都搞混了
本来我设的x是 进行了x1次+a操作和x2次-b操作之后系数的和
然后有ax1+by1 =n ax2+by2 = m (每进行一次+a或-a,同时必须进行一次+b,-b,-b,+b,b取正负和a取正负是无关的,就像马走日 先走1步横再走两部竖)
然后我竟然认为x1 = y2…因为我想你走一个a同时也要走一个b
但这样的话x1就是净操作次数了,但x1是各种不同操作的总和啊,他不体现操作次数。。
就做错了orz
我应该把做法写出来,没错,把我做了什么都写在电脑上,用文字规范我的逻辑
我的逻辑:设x1为多次操作后实际走了的系数,那么把两个式子加起来,最后的解x3 = x1 + x2不一定有意义,因为他不一定满足走一次a走一次b
那么找找规律,什么样的解x3 y3满足题意,一定是走一次a走一次b的
发现x3 y3奇偶性相同才行
从0开始 a :+1 b:-1 发现总和a +1 b -1
然后a -1 b+1, 总和a 0 b 0
奇偶相同

然后发现我思维不严谨,T1的模拟打错了,看来想出来做法,一定要在符合题意下严谨地找反例,而且如果这种做法特别麻烦,说明很有可能找错了,我的缺点是有一个特别优美的算法,找了一个不合题意,不存在的反例,有时候又想出来一个特别麻烦的做法,没有找反例。
模拟题目大意
水会不断地往下下,有很多挡板,挡板有自己的高度,一块水能够存在,他左右下边必须都有水或挡板
这里写图片描述

是模拟先递减后递增吗??? 非也,反例很好找

这里写图片描述
而数据范围达到了10^6之大
要找到一种方法,直接扫一遍
那么换个角度做题,让我算一共多少块水,我不一定非要一大片一大片地算,我可以O(n)扫一遍,那么把这些水拆开,考虑每个挡板上方会有多少水,一个板上水的高度由他左右两边比他高的最小的两个板来决定

然后是T3
一棵树
给出两个节点,给出一条附加边,问附加边所连两点是否分别在以给定的两个节点的不同子树中
首先他题给我们一棵树,那么我们最好画的像树,不然会把树这种结构的性质忽略掉,就是说还是要画地特殊点,别画特别普适的情况,而且要把题意抽象出来,又不能乱来,搞得抽象地失去了这个题的“样子”,比如说我一开始把图仅仅是画成了n个点n-1条边的无向图而不是树,从而损失树的性质
考虑树上算法,dp,lca,dfs序差分,前缀和,树链剖分
那么判断两个点是否在不同子树中,其实可以看做两个点是否在不同dfs序区间中,dfs序非常有用,其实树链剖分就是应用了dfs序,他可以吧树的问题转化为区间问题

然而如何想到这些算法呢,这就有赖于总结了,先拿出所有学过的思想和算法,然后总结其能干什么,适用于哪类问题

哎然后是思维题。。。讲真这种题我真不会做,唯一想到的就是由特殊推一般,正难则反等形式

多刷基本算法题啊 什么贪心模拟单调队列单调栈位运算什么的

猜你喜欢

转载自blog.csdn.net/Fantasy_World/article/details/81538129
今日推荐