比赛
latex模板: https://www.luogu.com.cn/article/1gxob6zc
2024.2.6
挂的分和得的一样多160pts
一上考场感觉t1是dp,直接跳,回来看到60的部分分和一个小细节,易写。写了个本来需要返回值的函数,后来不需要了,没改函数类型没写return,挂60pts——
下考场知道有单调性,可以双指针O(n),但是细节居多,调了3h!!
t2开始感觉像线段树,后来发现看错题了,感觉要用高精,写了一个半小时发现不用。删掉重来,心态有点慌。空间限制比较离谱,好在vector大招,想到正解了。然后分类讨论不知道是少写了一行还是调试多删了,直接挂50pts……
t3其实是想到单调性的,但是没想到双指针能O(n);也想到线段树维护区间信息,没想到舍一位logn,可以省去一位n。最后只写了个骗分。
t4莫队,很板子。然后用了hash被卡了!!!以后莫队+map,再也不写hash!!!发现由于长度比较短,后几位很多相同,真的会被卡!!挂了50pts
all in all, 学了双指针的O(n)算法,还有先读题再写题,看清看清再看清,考虑周到周到再周到,别慌!!!能不失的分就不失
一定要避免下考场改一行就AC的问题!!!
2024.2.18
挂30pts
还行吧,t1水题
t2灵机一动,巧用二分
t3真没想到还能嵌套,用kmp维护指针跑记忆化搜索,特别特别容易炸……自己应该写不出来。但是暴力展开有30pts,下次争取.(加强码力
t4没想到容斥。转化思想,一般正向难求就逆向。还有线筛不好写也有其他方法,但还是要记住板子。(加了个小优化错了一点直接少10pts……
2024.2.19
挂100pts左右
t1水
t2审题不仔细,挂分两行泪……写着写着就忘了要恢复到0,下来一改就过了啊啊啊,挂80pts
t3组合+dp。根本没看出来循环的性质,甚至没想到用组合骗分,毕竟不关注具体每行的内容。以后一定加强这类题,尤其数学!!!
还有这个对dp式子的定义范围理解要透!!
t4绷不住了。看的时间最长,最后发现回溯太多还是会tle……这种情况可以把它分离出来,vector记录即可,想太多了。。。然后不就是求割边吗?!!
然后tarjan板子不会写,调了很久。用异或处理反向边时cnt=1 !!!!
SPFA真的会被卡!!必须用dijkstra!!
2024.2.20
挂120pts
t1排序不等式,水
t2正解二分+单调队列优化dp check
(一定要复习单调队列优化dp的套路!!把带i的都维护啊)
然后我O(n^2)加了神奇剪枝,考虑到一旦找到当前t大于修改值,就无需向后查找,因为二者变化量相等。在最大值k不被更新是可以做到O(n)类似双指针的。如果k被更新的多,那么每次遍历wi-x就会减少;如果每次遍历wi-x多,k被更新次数就会少。基本可以做到O(常*n)
所以其实本来我是可以过的,结果把清空写在了return后面啊啊啊,挂60pts
t3树形dp可以骗60pts,然而我甚至没想一个比较正常的做法……直接向上合并相乘啊
正解换根dp,很套路,一个维护子树内,一个维护子树外,up and down,就是注意两个函数一定要看顺序!先dp再向上下合并
还有要维护父子节点的!
t4什么维护历史信息的线段树,难评
策略有点问题,为了骗额外10pts写了1h放弃了t3,不划算!!
2024.2.22
挂130pts(+100pts)?
题真的简单,我真的没实力……还有答题策略和转化思想问题
t1直接寄……
全场写了3h才70pts哈哈哈哈哈哈……
写到2h多才发现从一开始就推错了,心态开始炸。怒撕本子做了一个骰子。下次直接做骰子!!!!!
考完才发现做法假了,不需要维护整体的网格形状。对于骰子我们只需要分别维护六个面,每次滚动就是一次顺序交换,还有周期规律,其实特别特别简单……
t2还是想麻烦了,其实不需要upperbound,简单双指针维护就行。
然后最后没想到影响会遗留,cnt1写成n了,挂了90pts!!!
t3是因为t1没看的题,看完发现真的简单,就欧拉函数相乘。注意复习线筛欧拉函数,甚至还自己推了一遍
t4是5分钟速通,得了我本场比赛最高分的题……dfs+剪枝即可。
因为不抱希望,少写了一个剪枝,所以90pts
正确时间复杂度可以分成两段去dfs,最后O(n^2)处理即可!数据太水
2024.3.10
终于终于写的分没有挂了,但是t4没推出来一点,没实力(同机房好多大佬都推出来了)
t1简单dp
t2求树的直径,当天早上就在写树相关问题,很类似
t3看见数据范围直接放弃。没想到矩阵快速幂去优化dp。但是想到了就不太难,矩阵快速幂的dp式子居然也比较好推!怎么就没想到……
t4状压。好吧推了半天状态维护少了!!然后还有for的顺序,务必保证不重不漏!
2024.3.24
直接答题策略出大问题!!寄
t1简单,上来半小时
t2dfs还炸了10pts,不知道为什么。又是概率期望,又是排列组合。推了有1h多真的没想出来。然后发现我的思路本来时间复杂度就是错的,直接考虑枚举7个数全排列的期望,然后乘以位数即为答案。也是期望的可加性。很基础,但不知道怎么就想不到呢??
t3第一眼感觉像去年春测t4,感觉要用线段树st表等,直接没看……剩20min时才认真看,结果发现很简单,但连基本优化都没写完。带入算式化简可得三个未知数,然后有一个需要枚举的k由于满足单调性,直接用前缀和优化。
t4也是看了至少1.5h+,不知道哪儿来的信心看的。看出来状压+区间dp,结果转移想错了,其实只需要转移能化为1的结果就行,错误复杂度指数级上升。
总之,答题策略非常重要,一个是t3的遗憾,还有t2暴露出来期望和组合的不足!!!!!(我这两个多周概率期望刷了个啥?)
2024.4.5
清明节考试,真的不愧是概率期望专题,直接寄得很惨,然后明天三模(smile...
t1上来看了一眼直接扔,结果最后发现这是最有可能做出来的题……真是没想到约数和的公式,直接用质因子的次方就能表示,然后就是一个剩下非常暴力的dfs,居然优化能过!答题策略啊。。。
t2想的时间最长吧。最近做概率期望真的见到这种处理手法,甚至都几乎知道怎么推,没写出来。最后发现把题读错了……代价是次数,不是第i个付i元!!然后对于求一遍次数期望,再求一遍总期望,真的想了好久,其实还是不很能理解。也许能把次数只看做贡献。
t3想的时间次之。基本把性质都想到了,包括之前也做了处理手法很相似的题目,但真的就没想到直接枚举size。然后对O(n^2)居然推翻了正确做法,在想dp。
t4暴力本来70pts啊……我少打了个gcd啊啊啊。正解就是维护暴力的式子,三个线段树数组分别拆开维护!!其实很简单,最后打出来也很快!!!不知道怎么就没想着拆开呢??
答题策略的问题。包括概率期望组合还是一塌糊涂……最有希望的甚至t1t4.就会数据结构??思维量没有一点???我真的,好吧,菜就多练
2024.5.2
t1大模拟
t2一看就O(n2*m)dp或什么的,感觉方法清奇,基本完全没想法。。。所以就是dp,对于大于一半的条件,想到容斥,反向思考(我每次都想不到……)。然后写出来式子O(n3*m)发现不关注具体哪个选了多少,考虑优化一维,维护差即可。
考场写的暴力不知道为什么没写dfs?!我的方法不能全面维护,显然dfs更优。
t3一眼状压,然后时间复杂度一直算不对!下来才知道可以绕过m的,(数据太大,显然无关),直接一堆预处理,最后能优化到O(n4^n),对还是过不了。然后考虑枚举子集,要么直接预处理出来,要么使用for(int t=s;t;t=(t-1)&s)直接优化到O(n3^n)
t4还以为是找规律,脑中飘过了trie树,也没仔细想。事实证明找规律确实能写,但是太难想了。trie树的维护就比较万能,+1和合并都能处理,就是注意只维护奇偶性,和对二进制加减的理解……真的抽象
2024.5.3
t1简单题——但没想到吧,这个题面说的是保证是排列,数据实际有重复?直接100pts->40pts
t2我也不知道怎么想到离线查询,想到带修莫队,然后越跑越远,调了两个半小时得了8pts。还没暴力跑得快、得分多。其实冷静分析,能看到n范围特别小,又是维护区间查询和修改,容易想到线段树。正解是状压优化线段树,对二进制运算要求较高。直接树状数组维护01数卡常也能过。
这种题以后先打暴力!还有别直接开始写,先想好这个复杂度行不行。
t3没时间啊。本来前缀和分组都想到了,不知道怎么突然觉得贪心可以,但显然它炸了。另外我发现我的分组背包写法有问题,应该先枚举包的大小,再考虑组内放的东西!55pts。剩下的实际上是对分组背包特殊情况的处理。也就是考虑有没有足够的子弹去撑到一堆'Y',在前面的'N'中“借”子弹,加一维[0/1]表示在不在当前取最后一个。
t4没想到吧,暴搜+模拟。noip day1 t3可以可以。但是有30pts部分分,没拿到……看到一堆题解都是贪心,很不理解为什么贪心是正确的,但显然不能贪心。所以如何不重不漏暴搜非常关键。考虑对它规定一个顺序,由小到大去跑,并且从大到小枚举最多能出的情况。对于每种东西,还要处理因为遍历方式可能导致的小带大。细节多,一次过或一直调……
这次考得是非常寄啊,炸裂,基本上每题都有50pts左右的失分。。。太抽象了,真不知道我考试的时候在想什么!!总之就是冷静,想好了再开始写,头脑风暴,考虑全面。不要老想着贪心,因为它一般都不对!还有考前一天一定要睡早,否则第二天早上头脑十分不清醒!!!
2024.5.19
什么实力不说了,连读错两道题!!!
t1t4惊现同一题。结果t1直接想着是后改前按序号来,实际上是选择顺序不同!概率与期望,注意基础公式期望=sum(概率*价值),然后分别推。概率期望还是写不出来一点啊。。。
t2感觉就像dfs剪枝,因为只关注相对位置,真的好像就差一点点想到hash的剪枝,但是没有……对,所以要坚信自己的思路。然后七十分的状压,不知道怎么觉得时间复杂度不对就没写?!
t3又是读错。看样例看了半天没看明白直接放。殊不知这是这里面最简单的一题!!下来二十分钟就写了。。。
总之一定要仔细读题审题,千万不要想当然!!!然后概率期望的公式自己好好推吧。
2024.7.5
t1二分+贪心check,总之还是得自己造数据,一开始想简单了
t4各种方法都能做吧。贪心最优策略,寻找该点后面首个价值比它小的点。才知道upper_bound是只能在有序数组中用的!这个基于二分,我真的不知道过去都是怎么一直以为它在任何情况下都能求后面首个大于它的……
t2显然状压。就是我考场上不知哪儿来的自信,写了个自己从来没对过的容斥,但这个题容斥应该是伪的。白送55pts。仔细一想,我当时应该是因为怕数组开不下,才写的容斥,但显然我对空间复杂度一直记得是错的!!!Byte->KiB->MiB都是1024的进位,int是4Byte!!!正解只需要考虑最后出现的位置,加上预处理每个等价的点!还有,这题开long long会T!!!所以能不开ll就不开???(对于每一步都要取模的题,尽量用int,因为longlong取模要比int慢一到两倍。。。
t3显然区间dp,但是推不出,甚至连dfs都不太会写。究其原因是对割点的理解不足,化分割为合并,那么每次合并的贡献就是经过割点但不包含整个区间的询问个数。应该对这个询问个数是有所想法的,预处理掉它,也肯定是作为dp的价值的。
2024.7.6
IOI赛制,可以看到各位的分数和排行,怎么说,开题顺序确实有被带到,否则可能第二道直接开t4了……所以这个对题的难度的认知要清晰
t1假高精
t2二分答案,类似绝对值几何意义,总之就是相信自己
t3我那个dfs按理来说应该是可以做到60pts的,那么应该就是因为dfs的剪枝不够或者它浪费太多?总之用bfs只处理和记录每种方案,这种可以完全保证只有合法方案,最坏情况O(nC(n,n/3)C(n-n/3,n/3))是可以过的!(所以能不写成dfs的形式就不要这样写)那么正解还是dp,应该想到的,对于费用的计算我们只关注用了多少个KEY。考试还是没太明白如何处理这个价值,考虑每个相同字母等价,那么就是考虑首个字母位移的贡献,其实反面来想,只需要考虑当前字母之前有多少个其他字母即可。
t4写了暴力后就没太看了,陷入到自己的思维圈,根本没想到是dp。但确实想到限制条件太多,需要让某个条件定下来。那么也就是让k大定下来,O(n^2)枚举即可,然后走位置和有若干个大于当前的。还有需要处理的就是多个数相等的情况,可以类似离散化,人为给每个数赋一个值,然后就可以简单处理了。(最开始想的是记录是否经过该点,但太麻烦了,最好处理这种本质的东西)
2024.7.8
小学生太强了!
t1思路+小细节特判
t2容易想到找循环节的高分暴力,但是细节不好调,以及对循环节的理解有误,炸。正解需要关注性质,两个人比分11之内情况数有限,那么不一定要找到首个获胜的相同位置,而是找到对应的比分之处即可。还有就是谁先超过11分之后双方都-1是完全不影响结果的。
t3考场浪费时间最长的题,看出来贪心策略,最后一步判断写的不对(试图直接找出放置一般是不可能的)。时间复杂度显然O(n),对每一位放置的实际从前到后枚举即可,位运算的特殊性让我们想到拆位,经典手法了。
t4又是一个没理解题意的。只能决定跳舞顺序,实际和站位是有关的。其实数据范围一看大概能猜到,区间dp,那就一定是关注站位的。那么考虑当前区间能否删去,就是看它左右区间能否删去以及中间某个点(严格意义上不是断点)能否依托它的更左右(l-1或r+1)去删。考虑最后dp统计,多开一个n+1,因为我们并不是每次一定要暴力每个区间的双端点,如果端点能被另一个删去那么可以不要它。
t5状压的60pts还是比较容易拿的,就正常模拟,不用多想,应该去写。正解上考虑题目限制,喜悦度一到某个值就退出,很像背包-->处理一共选了j和是k的方案数,然后对于选择若干个音乐的情况,只要选择音乐的数目相等,那么概率可求。也就是我们只需要处理那个背包,这时候就非常巧妙了,对于当前点不能被选,我们可以把背包退回去,这样比重跑一遍复杂度小O(n)
这场比赛吧,身体有点不舒服跟着脑子也不转了,考到t2以为是之前做过的题然后不会就破防了……总体应该是没有那么夸张的难度,赛时就是要仔细想,调整心态,专注于题目本身而不是想别的东西。
还有,这比赛暴力分打满就很多了!一定要好好打暴力,能拿的先拿上
2024.7.9
小学生太强了!*2
t1有一个关于开不开ll的问题,最好只给ans开,不用管那个题目给的造数据的程序的int
t2这个方案是可以贪心的……导致我不会算后面的方案……所以告诉我们,能用dp想,就用dp想!!!考虑本质,能转移的都是没有最小的右端点在当前位前的。对于方案数,经典转移:dp优于当前的,直接覆盖方案;dp等于当前的,相乘/加
t3真的又是背包,还需要bitset优化?!能优化到O(nm/64)卡常
for(int i=1;i<=n;i++) s|=(s<<a[i]);
剩下的对于第k大方案的统计,需要优先队列,dfs bfs都可以,bfs显著时间更优。就每次对当前最优方案,分别取每一个的次优点,能够保证前面比较优的方案一定在队列内。
t4有点博弈论吧,比较显然是区间dp。重点在考虑最优策略,那么为了处理区间dp,考虑那么就让龙先不拿两边,而是积累为可以拿若干张的券。(否则龙从中间拿会破坏区间)然后就可以分别维护龙和小明拿到的区间两边的位置了。
我已经受不了了……一直考区间dp!!!一直没推出来。。。
2024.7.10
又是IOI,怎么说,就是发现大家t1t2都过好快啊,刚开始心态容易受影响。但又是被大佬做题节奏和部分分带飞的一次。所以其实前面的题没有那么难,能做快就要做快,这样留给后面充分思考时间比较多。
t1性质+模拟
t2性质+栈
t3中途改题,原因竟是波波spj炸了一看就是dp,写了个dfs居然有40pts,然后我奇怪的脑回路竟然是继续剪枝?!按常理显然不可能只这样就多过几个点啊!!朴素dp也就是dfs思路,只不过换成一个个枚举,还是比较好想/写的。考虑优化,把它作为区间问题能优化掉一维。考虑本质,序列实际是不降的,那么就是插入0或整体+1,再用一个前缀和优化即可。
t4开始只想到O(n^2)暴力。后来快结束才想到,之前做过状压的题,就是和质因数有关,实际上每个数包含的质因数个数很少,也就二十来个?所以这题是暴搜+剪枝!注意的是边界条件的判断,否则会多算。
t5感觉就像是二分了,然后check写出来是O(n^2)dp,还以为是什么高级策略或者处理能达到O(n)。是真的忘记了单调队列优化dp了啊,最后40min甚至都在写线段树!!仔细想一下,上次好像也是把单调栈/队列能做的题了用线段树,所以说还是要看看有没有更简单的方法的,一切从简。
单调队列优化dp的基本形态:当前状态的所有值可以从上一个状态的某个连续的段的值得到,要对这个连续的段进行 RMQ 操作,相邻状态的段的左右区间满足有序的关系。
可以说暴力是打满了,不过是有些太暴力了,所以现在的瓶颈在于dfs/暴力-->简单/朴素dp,即高分暴力!!!
2024.7.12
暑假第一场csp-S,难度还可以。据波波说,这些套路到noip前我们都会非常熟悉,这套题总体不难。
t1考察对floyd转移的理解,重在猜算法以及发掘本质,发现其实每次dp就是在前k个点之间转移的!那么直接从小到大排序,就能保证找出转移过程中的最大值
t2二分套二分假做法加上快读居然A了。。。只能说数据水以及考场上就是要敢写。正解悬线法或单调队列,找到一个>2k的矩阵,行列分别删除即可。对于最大子矩阵的题,悬线法很有效(关键在于好想好写),能优化掉一维。
t3显然线段树,最后极限1h打线段树,样例还过了。结果没看见大样例,所以直接扔了!!!因为线段树pushdown时的下放乘积没有处理区间长度,直接100pts-->0pts我真的!这初学者都会好吧。
t4根号分治,类似分块,用于求解区间内每隔一个定值的和。该间隔定值大于根n的直接跳,小于的可以提前预处理。然后就是一些细节,可以倍增求解k级祖先,也可以直接长链剖分O(1)查询。其实只要敢写,代码也没有那么长。
学习了卡常小技巧:
1,可能时间复杂度本质出锅,由于没有预处理!
2,代码量较少且没有大循环的函数前+inline
3,快读快写,数据量一大用处非常大!!!
inline ll read(){
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9')
x=x*10ll+ch-'0',ch=getchar();
return x;
}
inline void write(ll x)
{
if(x<0) putchar('-'),x=-x;
if(x>9ll) write(x/10ll);
putchar(x%10ll+'0');
return;
}
2024.7.13
突然变成早上考试,中间一个多小时简直困到不行,没有办法思考。所以一定要睡早,调整状态。
t1没想到啊真没想到,那个dp会炸精度!下次一定要仔细关注题目,以及题目没有让维护的东西就不要维护了,直接贪心策略求即可。要多想多看。
t2怎么说呢,正解想到了又好像没有想到呢(有点像根号分治)。正解的关于时间复杂度的证明是想到的,但是,很神奇的,我处理了最小公倍数,并且认为这个一定是性价比高的全拿比较优,但显然还有余数处理的情况,而且这个时间复杂度太小,一看就不太对。。。(还有一个注意比例比较的精度问题,要改成double
t3图啊什么的都画出来了,但是最后还是放弃了,也许觉得没有希望(?感觉就差一层窗户纸那种,很接近答案但是还是差一步。要相信自己,说不定就推出来了。(没推出来有一个原因就是我画的是互质的数,可能还觉得和欧拉函数有关,还是不对。)应该画合数的,要灵活一点,这样更加清晰。正解是打表或者猜结论(就是手模样例)
t4想到应该是把查询和修改平均到log,那么按理来说应该想到线段树。最开始一直在想处理父亲,如果稍微转化思路,变为处理区间,那么很容易发现此时每个父亲最多给区间最值贡献一次,直接最多O(n)。dfs序很容易很套路的维护。(就是注意细节和大样例)
这次也是挺炸裂的,一言难尽。t1t2太草率,要严谨仔细观察题目;t3t4要深入思考,提高时间利用效率,代码写快一点。对于处理手法要更加敏感和灵活。
2024.7.14
t1树形dp经典up and down
t2异或和最大,首先想到01trie树,(包括考虑到对插入和查询的时间平均下来),考虑处理大小限制和整除即可。特别发现的是值域比较小,考虑对每个约数直接建trie并插入x;维护经过每个点的min值判断即可。有一点是类似根号分治的做法,可以暴力骗分。
t3正解是dp,但是这题二分大家居然都过了。。。(数据比较水)dp状态设计为从i到j,加了k次油,最少的油箱大小。发现k一定时决策j具有单调性,那么用一个指针优化一维,变成O(n^3)
t4考场浪费时间最长的题,想的性质没问题,但是分类讨论情况太多,其实只需要建一张图判环就可以解决问题。然后数据量非常大,又有树剖后dfn连续,我们需要线段树优化建图,来解决建立单点连区间的问题。到现在都没写完。。。
一个分配时间问题,应该再给t2一点时间,不过知识点忘了确实硬伤。思考之外要更优化一点思路。
2024.7.15
t1简直破大防,考场调了两个多小时正解,最后连部分分都不想打,实在得去打别的题部分分。。。下考场又重构,调了一个多小时,实际核心代码只有四行。。。就是一定要带入数据去算,推式子。另外听说不用那么分类讨论,正反跑两遍即可,我觉得有道理。。。
t2一旦看了大样例,再猜一猜结论,其实很显然,就是求gcd。也可以说是裴蜀定理结论题。。。(可惜我数论忘完了)
t3三维dp比较显然吧。dp[i]=max(dp[j]+|xi-xj|+|yi-yj|),(因为要枚举坐标所以是三维)考虑转移的优化:就是不需要按坐标挨个枚举了,直接对距离拆绝对值,显然绝对值拆为两个正的是最大值,刚好dp也是求最大值,枚举拆法并转移O(nm)。可以使用欧几里得距离转化为切比雪夫距离,就是欧几里得距离的横纵坐标(x,y)变为(x+y,x-y)求切比雪夫距离(两点横纵坐标差的最大值),但实际上二者维护下来没有区别。
t4又是一个位运算拆位的题,第一问求最大值和该区间左右端点的异或和的积,容易想到单调栈找到左右首个比他大的点,然后计算区间贡献即可(注意处理相等情况一个取等一个不取)。第二问求对于区间的左右异或和大于区间最大值的数量,我们会发现,对于第一问求的区间,满足包含或不相交关系,还有区间最值的限定即为二叉树。那么考虑合并区间是暴力枚举较小的区间的每一个值,在较大区间查询,然后合并两个trie树即可。
波波真的,不放代码,就放一个很离谱的题解。。。居然激发了我的潜能,调出来了?!太震撼了!!!所以遇到任何问题先自己尝试!!!
2024.7.24
波波提前给我们预告了题目顺序不是正常顺序,虽然大样例透露出一些端倪,但我还是有一定程度受到题目顺序的影响。
t1是最难的,第一眼就感觉要用线段树维护,开场打了部分分跑路。但也是本场分数最高的题目。最终的做法有:括号序列+线段树维护距离,点分树,lct,线段树维护直径等等。是一个巧妙的手法积累,关于拆绝对值的,以及关于括号序列匹配能维护树上距离。
t2是dp及优化,暴露了一个问题,才知道评测机1s能跑5e8的复杂度!!!对优化后的时间复杂度有错误的猜测,直接导致没写出来。其实应该去写那个我最开始的正确高分暴力思路,哪怕当场可能觉得悬了。考虑继续优化,一种是拆绝对值,用树状数组优化(其实只要看出来,那是很好写的);另一种是继续观察题目本质,发现转移规律,实际可以去掉一维直接维护转移的最优情况(这不是一般人能想到的,但是直接维护转移最优情况比较套路)。
t3是全场最简单的题,但是不知道是不是它在这个题位,心态多多少少受到影响,不知道为什么每次都是t3容易挂分或想不了,必须要克服这个心理!!下考场尝试了一下最开始我想到的玄学复杂度代码,发现A了。。。而我考场上浪费了大量时间在写部分分上,实际并没有什么大用,还是挂了30pts。所以能写正解的题尽量冲一下,况且我的思路再深一点点就是正解了。
t4构造题,没想到啊,猜是个玄学算法或dp,没想到还真这么玄学。需要一定灵活思路和敢想,就纯纯想到了就简单,想不到就凉凉。(但是感觉没那么难想,应该尝试一下)
总之答题策略和心态上出现很大问题。毕竟大考场上也可能状况百出,没有题目是一定按什么套路走的,因此也不用在心里有什么预设,一切都要根据考场情况走,仔细观察题目,寻找合适的开题顺序。还有是如果把握不大的比赛,尽量打完有把握的高分暴力就去冲正解,想了很久的点拿不到就算了,沉没成本。还是要敢于写正解的,不断思考,定会有所收获。
2024.7.25
和hszx联考的
t1简单构造
t2二分+树形dp,其实有一个比较暴力的思路我是想到了的,时间复杂度不对,但是下考后写了一下居然过了!考试一定不能怀疑自己,该写就写!!
t3想到一点类似于莫队的处理。但没想到套路手法是对不能同时选的连边,然后观察图像,比较显然的会发现成树的是不能全选的。科技在于可撤销并查集,实际上还是类似莫队。
t4一看数据范围就比较蹊跷,不是O(n^2)但也没有那么大。考虑每次的最优情况转移,化简式子,我们得到了类似于斜率优化的形式。不妨维护上凸包,在上面二分查询答案。考虑修改操作,发现对整个区间来说,斜率不变,只是平移,那么不妨考虑分块。最终时间复杂度O(n根nlogn) -->这题真太神了,巧妙且难写,几天过去了还没改完
2024.7.26
t1可以找规律也可以直接暴力把每个值算出来排序,第二种方法非常简单和显然,我不知道怎么想的非要找那个规律,但是nm打反了,挂了20pts
t2一眼应该是dp,但部分分最后没时间了,写炸了。实际上就是分类讨论枚举对于每个值作为最大值的贡献,然后疯狂推式子。(很难想,很容易漏情况!
t3我不由得说一句,没看完tj悔终生啊,这题虽然和前天那题差不多,但是这么多手法之中就只能用线段树维护树的直径了啊,而且实际上这个方法很简单,就是维护直径的两个端点,在区间合并的时候分别去算最长路径即可。以后看到题目的各种解法一定要都去研究以及研究透彻!!!
t4二项式反演,斯特林数等等……没学过,在学了!
2024.7.27
t1再一次,全场最难。观察到mod比较小,实际上所给的n就是没用的,暴力dp其实容易写的O(mod^2m).f[i][j]表示第i次后x的数值为j的概率,事实证明是我的dp状态开少了,不能正确维护。对于后面m的巨大范围,容易联想到矩阵快速幂,但是本题实际上只有二维的转移,也就是不需要写成矩阵快速幂的三维形式,是合理的时间复杂度。正解是什么原根的优化,实际上用的就只有mod为质数时,原根的次方是互不相同的,用这个什么化乘为加,再用循环矩阵的快速幂(同理,只需要维护单维的数组)
t2最后几十分钟写的,仓促了,该推出来的也差不多了(实际不用被那个高斯消元带偏,它就是部分分),考虑化简一下树形dp的式子,反推一下,有可能做出来的。
t3其实我对题目难度的推断基本是对的,开场两个小时吧,都在看t1t3的部分分,然而一分没得……只能说还是我自己太菜了,一考数学就完蛋。下考场跳出之前的思路,只从大局来考虑,不那么关注图形,分别考虑四个方向的步数,只需要保证来回步数相等即可,t=0就很容易。剩下的t=1,t=3我们手模样例发现就是卡特兰数,而根据我们考虑一种步数不能超过另一种也可以推出,就是完全遗忘了这个知识点,那数学学了跟学了一样。。。t=2数据范围也能说明一些问题,是一个O(n^2)的dp。
t4预设型dp,之前有一次考试实际上遇到过,怎么就忘记了这个处理手法了呢!!题目所给的数据范围不是多维dp就是搜索等奇妙算法,而我们还是需要关注相对位置的,所以不能折半搜索。dp[i][j][k]表示放到数i,有j个空能放(或理解为有j+1个最终的子段),最大值的总和是k时的方案数,细节很多,对于dp的正确性,实际上保证每种情况在状态下转移均不相同且没有可以通过第二种方式重复计算的,是正确的。
就这一考数学和dp就完蛋的状态也是没谁了。。。
2024.7.29
t1算是这几场里面最简单的了吧,考虑到mod后的范围是0~mod-1,再特判一下
t2也是dp,也是见过这种处理手法的dp。对于不考虑顺序的生成数组,不妨我们直接套路化生成升序的,为保证升序或降序,我们考虑整体同加/减/除/乘一个数,或新添一个数,套路还是比较显然的。
t3没什么算法吧,就是原题目的性质和脑洞,太巧妙了。对于一整个区间关于原点的操作,实际上考虑原点移动即可!!还有发现对于对称的两边操作,是等价的,考虑将其连边,小区间映射到大区间。最终时间复杂度是O(n+m+V)的。
t4也就这次的t4没有那么ex。暴力有65pts,然而我对于windows换行符的处理,让我挂到了5pts。我一直以为\n\r是一个字符唉……应该用getline(cin,a)的,就不会有那么多事了。慎用getchar(),另外c++14不支持gets()!!!然后就是维护[l,r]区间内Rx,t+t>=y的个数。还想了一阵要不要用树套树。。。实际上我们可以观察到y是逐个增加的,也就是加入过了若干个之后我们add一个-1,在保证>=y的情况下直接查询[l,r]即可。
2024.7.30
太破防了,真的,t3最后十分钟才写暴力dfs,之前两个小时一直在写t2,结果根本就是一个特判分!!!t3最后十秒发现自己写错了,改完没交上!!!直接挂30pts,否则rank3了!(虽然大家都挂了很多分)所以教训就是一定要先把暴力拿满!不能先写没把握的正解!!!(还有那个t2的原题,怎么会做不出呢?!
t1开始还想到二分图了,实际冷静下来发现暴力就行了……(所以要冷静
t2只能说和之前那个题一模一样了(考场上好像觉得有点像,但怎么又跑偏了)。看到小数据范围想到不一定是区间dp啊,还有可能是高维dp啊,直接记录每种球用了多少,然后考虑下一个放某个球。注意的是一定不能维护距离,要维护逆序对,否则来回交换等于没换。(遇到某种思路想不通的时候,一定要勇于换思路,不要一条路走死
t3写个暴力也是极限了,这题dp真的抽象。考虑求积的实际意义:就是选择自己或上一个的球的方案数。正解十分巧妙dp[i][0]表示考虑到第i个人,第i个人考虑自己原有的/上一个人传过来的球的方案,所有已经确定贡献的方案数。在计算时,我们发现当前考虑自己和下次考虑上一个的情况和为a[i],因此在计算完一个以后会有后效性,不妨统一在第二次中计算!而我们发现,对于那个没有重复方案的限制,就是至少一个人不给球,否则一定可以同时-1得到相同结果。一个容斥:用所有方案数减去每个人都给球的方案数。
t4就是部分分很多。正解是直接考虑题目中所给的修改条件,发现实际上就是会被之前的某个操作覆盖到。把它想成差分,对于时间和区间的两个限制条件,考虑对时间进行扫描线,每次考虑所有增量对当前的贡献。(t+min(x-t,l-t0)-min(p,l-1))*d这样还能处理当前没有贡献的情况,对于这个绝对值建四个线段树/树状数组分类讨论即可。必须用前缀和的形式写,不然没办法分类讨论,情况太多了。时间复杂度O(nlogn+qlogn),代码一堆细节。
2024.7.31
和hz联考的,一整个考得就是非常非常寄和炸裂,排名已经不想看了。机房巨佬小学生ak了,前三个题1h10min就全a了,彼时我的t1还没做完 :)
t1给了那个值域,就莫名其妙的,那么一看就是直接按值域枚举,考虑贡献了
t2首先我把题读错了,其次我直觉这东西是dp或组合数学,直接放弃了,可以说没好好看吧。所以是万分后悔万分后悔,但凡看了那个样例,再稍微猜一猜就出来了啊。真的很简单,如果猜到结论的话。就是只要某个能和某个交换,那么他们两两都能交换。
t3概率与期望dp,我觉得挺不容易想的,如果按照普通人的思路,考虑上一个某个状态下的贡献(即答案乘上上一个状态),其实是很不容易的,或者说是有后效性的。那么直接考虑计算每个水管在r轮内被修的概率,乘上价值即可。发现一段水管被修复过,只需要让在他前面的要么被修过,要么没有爆,那么就是前面到该点的概率只和剩余轮数有关。fi,j表示前i个位置,在r轮中修复j次的概率,枚举当前位置是被修复过(1.0-没有爆的概率)还是没有爆即可转移。
t4题解给的是平衡树,区间操作确实让人容易想到平衡树,但真的考场不可能写得出来啊!我考场上就想到了分块+链表的做法,倒是没想到双端队列。考场上脑子不知道怎么抽的,分块只记得处理跨区间的却不记得处理在同一块内的。幸亏写了个对拍拍出来了,但是还是自己没实力吧,代码写太慢了,最后剩半个多小时想着先写部分分吧,暂时没管那个数据,最后发现没处理,但已经没时间了!!!(下考场一加就过了,真服了
这场就是想着先写暴力,但是最后一念之差吧,这谁都说不准。还有对于数学或dp题目的判断吧,不能想当然,一定要好好看题,保证的就是能拿到的分都拿到。
波波曰:“先解决思路对、没拿到的分,再解决思路想不到的分”。
“所谓的会的得不到的分,那就是你考虑不周,不会啊”。
“都说过程比结果重要,但没有那个结果,你跟谁解释去”。
2024.8.1
t1虽然好像也是数学,但不太难
t2最开始没理解题意,后来理解了之后很快想到了tj的思路,当时觉得有戏就一直推,硬推了2.5h吧。但是真的一直在想每个东西奇数偶数的贡献,非常难算(但应该是能算的)。总之没推出来。其实很简单的一个点就是前面的东西全部直接处理出来,后面的for循环只需要考虑奇数相配的额外贡献。
t3真的完全不理解考场脑子想的什么,不能理解。都想到了建边的优化,之前那个题,每个连向lr形成树形结构,居然想不到每种相同价值的东西是等价的,开一个点就可以了。还有那个单调栈的处理边界,很明显我写的不严谨。以及dfs确实是常数大,不如for循环清空。还有观察这个数据范围,bitset是学过的东西,用来优化的!应该想到!
t4一个dp。依然是写的时候根本没想到那个转换……题目给的保星卡和星星显然是比较难以同时维护的,那么其实知道保星卡和胜负局是可以直接算出答案的,最后进行特判即可。就是真的,为什么想不到就是求保星卡啊!!!
发现了,我非常容易想到一点性质就直接开始推或者写,没有更加估计到全局的一些东西,就是一定要有大局观,完全发现题目的各种性质。而且时间分配上,还是一个小时推不了就换题吧,要不真不行。(还有要写对拍)
2024.8.3
t1好险啊,幸亏最后想到逆序对了(关于交换相邻的两个数),其实手模一下数据大概就能发现移动距离和左右大于它的数的关系,用树状数组维护。
t2我的暴力dp居然tle了,那O(n^3)过不了,不能心存侥幸!可以使用单调栈优化dp,是50pts。其实正解是打表找规律(bushi。所以是可以把暴力结果输出看一看的。实际上就是维护每次最优解的区间,然后考虑转移ans,还是不太难想的(?思维灵活一点
t3思路其实很接近正解,但是当时可能是时间不太够紧张了,没有非常仔细地推,导致部分分也没有。考虑不周,对于正解需要考虑-1 1 -1 1 -1情况具体是会影响后面选与不选结果的,那么实际上就是划分出最长的-1 1串们然后去给ans+sum(len/2),用线段树维护
t4暴力dp真的不难想,O(n^2)二维dp,考虑到实际上两个人是等价的,所以维护成一个人在a[i],一个人在a[j]的情况即可,50pts。实际上不难发现最终的答案是一段一段的,我们把dp拆开,发现能够用线段树拆绝对值以及维护转移情况。
心态还是有点炸,该拿到的部分分没有拿全。这场t1确实可能不那么容易,使用了基本上1h一道题的策略,感觉好多了,至少分数没有那么难看。但是心态还是挺重要的,如果能不畏难,不慌乱,只是认真想题会不会更好?
又是若干场改不完一点题,更不用说写总结了
因此我打算后面只写心路,不写具体的题
2024.8.6
果然是过了t1然后剩下高分暴力就还好,但是t2很遗憾,感觉快要想出来了却没仔细想,下次要好好想t2,最好能过
改题学到的思想:正难则反
2024.8.7
好吧,确实t2最简单,但t1实际上也不难想,应该考虑到它的题位,去好好想的。另外其实t1没想到也是有原因的,hash写出来和我记忆中的居然不一样!!!就很离谱,每一段时间不写都会卡住……它这个比较子串是很方便的,如果有大局观的话。
t3没取模,没有部分分……t4写了个线段树不知道为什么整个就mle了(注意特判m==0的情况,太炸裂了),删了就过了部分分……所以还不如去写t1!!!
图论套路:把暴搜改为并查集连边,或kruskal。可撤销并查集。时间轴操作分块。以及分块的块长可以直接设为定值,如1024,否则可能被卡时间……
下场,一定要,t1t2好好想!!!不能把暴力作为考试的重心
2024.8.8
bobo曰:"你的答题策略不能是乱的,你没有那么强,把所有时间放在最后两道题,不现实。"
"如果你前面考了很多场都炸了的话,偶尔有几次好了,不要寄希望于考得好的那几场。"
虽然这场考试前将近两个小时去打疫苗了,但是答题策略仍然有问题。就可能是前几次那个考试题难度不递增,然后就觉得t1t2有一道想不出来是不是太难了,直接去写后面的暴力,然而往往炸掉的可能性比较大。明天,一定,t1t2为重!!!
t1写了个O(n^2)暴力,想到那个枚举倍数以及树状数组记录的思路,偶然记得那个n+n/2+n/3+n/4+...+1的复杂度好像不高,但是又想再套一个log怎么可能过不去,然后居然没写!!真服了。一定要记住那个调和级数的时间复杂度O(n ln n)!!!结果下来写了考场思路就过了……正解确实是我猜的和O(nlogn)的LIS有关,也暴露了我不会写的这个。还有一个小处理,对于想在某个组内挑一个放到LIS中,我们可以选择把组内倒序排。
所以想到的思路为什么不写呢???
t2刚开始写的分块发现不会分块维护区间众数,太难评了。后来改成莫队舒服很多,然后居然是正解……然后分块可以维护区间众数的,只需要维护一个区间的前缀和以及每个区间到每个区间的众数,答案为左右单独的加中间贡献或纯中间众数。
t3太有趣了是之前看启发式合并看到树上启发式合并的应用。但是今天也算是看明白了之前一直没看懂的树上启发式合并,先计算轻儿子答案但不保留对cnt贡献,再计算重儿子答案并保留对cnt贡献,最后遍历轻儿子的子树节点并统计答案。时间复杂度O(nlogn)因为每个节点被算的次数为它到根的轻边数+1(logn+1)。
t4太离谱了,开始想对了是单调递增序列,但是居然有可能这个差分数组是从负数开始的!!这就是还得手模样例!然后就是比较套路的处理单增的dp,整体加或新加元素,整体抬升,最后注意我们要合并两边的单调情况!!!
2024.8.10
总结就是,暴力一定要打满!t4的70pts暴力没写太遗憾了!开始看错题了就一直那么错下去了。。。
冷静下来,太难的题暂时放弃,比如t3.浪费时间且只有10pts。
t2的二分假了,对于一个显然没有单调性的东西我居然直到最后都觉得它是单调的……最好把式子列出来,然后注意取整的结果最多根ai种。所以,对于不会正解的我:我要学模拟退火!!机房大佬用模拟退火有A掉的!