三道题,礼物,通讯,奇袭
第二题应当是比较简单的,但是我并没有想到正解,其实稍微一贪心就能得到解。
第一题的话,教训就是,我应该先有个大致的思路或者框架再进行程序设计,没有想明白就开始写或者是想当然的写,这样写到一半再重新写,很浪费时间。我一开始写了一个正向dp,但是死活不过样例,后来想到了高斯消元,因为式子仿佛是有后效性的,但是最终我想了一下,可以移项消除这个后效性,那么我们需要找到一个“基”,让这个“基”是不具有后效性的,然后用这个“基”去更新他人,那么这个“基”就决不能自己转移到自己,考虑一下,当状态是mx的时候,直接停止下一次购买,所以不具有后效性。
那么我们考虑反向dp,这是一个常见的期望dp思路,考虑反向从[s|(1<<i)]转移回[s]这样转移之后,通过移项等数学操作可以拿到期望次数。
第三题的话,27分暴力很好打,一个二维前缀优化,n3暴力非常简单。
考虑n2暴力。
把题目转化为一维问题,也就是求一些区间里的满足这个区间里的值在y轴的映射是连续的一段,那么也就是max[l,r]-min[l,r]+1==r-l+1
所以可以ST表处理一波然后0.5*n2枚举区间最终得到答案。
期望64分。
AC的话,挺玄的,虽然说现在是过了,但是我反而觉得64分暴力的思路比这个正解的思路更加的重要。
那么考虑分治算法,之前HEOI2019的时候有一个学长和我说过,分治是一个非常强的算法,现在在这里验证了。
是挺强的。
分治的思路大致就是:分到最小的不可分的子结构,然后由子结构再挨个进行区间合并最终得到整体结构。
换成这道题就是:当前区间的合法区间个数=左区间的合法区间个数+右区间的合法区间个数+跨越左右的合法区间个数。
数学老师说不会做的时候要分分类:
1.最值在同侧。
2.最值在不同侧。
第一个可以直接计算验证。
第二个的话,利用区间[l,mid]或者[mid+1,r]的最值单调不增(减)性质,进行贡献计算。
因为取值范围只增不减,那么最值只能朝着远离x轴的方向行进。
具体来说要判断两个条件,满足其中一个的在桶域上加,有某一个不符合的就在桶域上减,而每个区间端点作的贡献直接从桶里倒出来就可以了。其实这也相当与一个hash的离散思想,进行值域统计和查值。
复杂度是nlogn。
总的来说这次考得并不太理想,但是唯一的进步就是我交卷子了,比起上次来说多了几十分,也算是一个进步。
毕竟我都在电脑上贴了一张写着「十分钟一看表,五分钟就交卷」的纸条,再不交卷子就有点过分了。
虽然没有考得很理想,不过我改掉了一个不交卷的毛病,也算是一个进步。
下次的目标就是做到wq学长评价wzz学长国赛时候的那句话「为了做题而做题」,我还不太理解,大概是一种暂时忘却了得失的专注吧,我想我离那个境界还差很远吧,不过要用这个做目标,也许有一天就实现了吧。
下午吃饭前走的比较晚,本来是想再调会再走的,过了一会教练进来了,我心想我还是先溜了吧。
正想从机房后面溜的时候没想到被教练发现了。
教练问我题改的怎么样了,我说还没。当时心里想觉得他大概是还要说一些什么别的吧。
他和我说「现在到了困难的时候了吧,看你怎么应付了。」
我说「嗯。」
我会好好应对的。
用今天颓的moyiii学姐的一句话来结尾。
给狂妄自负加以适当的绝望,这才是真理。