首页 > 其他分享 >CSP-S联考总结

CSP-S联考总结

时间:2024-02-25 10:00:11浏览次数:19  
标签:总结 2023.10 然后 CSP 前驱 余数 考虑 联考 翻转

目录

2023.10.9

感觉还不在状态,被卡了一下常,加上没思路,加上部分分没怎么想,加上开错题,打得比较差

T1

打标找规律,然后\(\sqrt n\)做,但不能取mod,不然会TLE80,还要开int128

T2

奇怪结论

T3

优秀的计数题

给定一个序列a,要求找到序列x,满足\(x_i<a_i\and x_i\)mod\(l\)互不相同,求方案数

考试没仔细想,不然还比较可做

首先考虑对于\(l|a_i\)的情况,取任意数都是\(\frac{l}{a_i}\)中可能,所以一种排列的方案数就是\(\Pi\frac{l}{a_i}\)

然后考虑余数,我们考虑最简单的暴力,2^n枚举哪些取余数,那么考虑把余数b从小到大排序,第i个余数的取值就是\((b-i+1)\)

整理一下发现,一个数取余数,和下取整都有一个贡献,但取余数时的取值是固定的,取下取整时的取值只是固定mod的余数,于是考虑最后再把后面的贡献补回来,假如有k个取余数,那么就乘上\(A_{l-k}^{n-k}=\frac{(l-k)!}{(l-n)!}\)

然后就设\(f_{i,j}\)表示到第i个数,有j个取了余数,转移就是\(f_{i,j}=\lfloor\frac{l}{a_i}\rfloor f_{i-1,j}+(b_i-j+1)f_{i-1,j-1}\)

然后答案就是\(\sum\frac{(l-i)!}{(l-n)!}f_{n,i}\)

2023.10.11

T1

给一个每个点的度都小于三的点(有重边),黑白染色,要求相邻两条边所连接的三个点颜色不能全部相等,求染色方案

手摸一下,发现没有不合法,也没找到什么好做法,大概是调整法。然后仔细观察,我们令一条边的两个顶点颜色相同则权值为1,否则为0,如果最小化权值和,那么一定会更优,所以先全部先染黑,然后若有连续三个相同颜色,就调整一下,可以证明不会权值只会变小

T2

奇偶判断一下无解,然后就是简单的统计逆序对

T3

设n^4状态,然后n转移

T4

计数好题

给定一棵树,可以断任意条边,定义一种方案的代价为各连通块大小的k次方的和,求\(2^{n-1}\)种方案的代价和

首先考虑暴力,设\(g_{i,j}\)表示以i为根的子树,i所在的联通块大小为j的代价,j=0时表示断掉i的父亲那条边,然后为了方便转移,我们i所在连通块的代价先不算,每次更新完一棵子树,再进行更新\(g_{i,0}+=\sum g_{i,j}\times j^k\)

然后我们发现可以背包转移,时空复杂度\(O(n^2)\)

想到这里发现根本无法优化,于是就需要一点经验,发现\(k\le100\)

设\(f_{i,j}=\sum_{s=0}^{siz_i}(^s_j)f_{i,s}\),就是以i为根的子树,i所在的联通块贡献\((^s_j)\)的代价,我们发现,j的范围被缩减成k,然后根据第二类斯特林数的公式(普通幂转下降幂),\(s^k=\sum_{i=1}^ks2(k,i)i!(^s_i)\),然后令\(ans_i\)为该点断掉父亲的答案,\(ans_i\sum_{j=1}^ks2(k,j)j!f_{i,j}\)

发现了可以计算答案,那么如何转移呢?

考虑状态的组合意义,在连通块中取了j个点,由于子树中的情况互不影响,可以用乘法原理,于是又可以背包转移,注意ans要当作大小为0的物品转移

然后如果我们把背包大小定为\(min(k,siz_i)\),时间复杂度为\(O(nk)\)

2023.10.13

T1

数论分块+差分

T2

有长度为n的序列,m条限制,每条限制形如\(l,r,x\) ,要求区间\(l\sim r\)的and为\(x\),对于\(i\in[1,m]\),求满足除了i以外的全部限制是否有解

首先暴力,考虑拆位,对于每一位,0我们就做一次区间覆盖,1就查询区间是否有空位,复杂度\(O(mnlog)\)

我们发现删掉的区间若为1,直接判断即可,就考虑0的时候怎么做

我们想,删掉一个区间覆盖,只会改变若干只被覆盖一次的位置,于是我们把拎出来,然后把不合法的区间拎出来,若该删除区间包含的特殊点不能把全部不合法区间改合法,则不合法

于是就考虑只判断两边的,因为中间若存在我们已经提前判过了,会导致全部都不合法

所以只用记录左端点最大值和右端点最小值判断即可

T3

先缩点,再bfs跑最短路,再根据数据特性水一下

T4

奇怪背包结论

2023.10.14

T1

简单转化一下题意,求n个线性无关的数的方案数,然后DP即可

T2

给定一棵黑白染色的基环树,每个白点会给距离它最远的黑点们贡献1,求最后黑点的最大权值

首先可以想到n^2暴力,然后考虑优化

我们用线段树维护每个黑点距离当前点的距离的最大值,然后遍历一遍基环树,如果走的是树边,只有子树的距离-1,其他+1,如果走的是环,就个一半(判奇偶),然后发现dfn序即可

对于一个白点,就给打一个最大值对应位+1的标记,然后下传即可

2023.10.16

T1

二分+贪心/堆

T2

求满足一下条件的二叉树

  1. i号节点的儿子个数为\([l_i,r_i]\)
  2. i号节点的子树中至少有一个节点的编号大于i

考虑一种统计二叉树的DP,设\(f_{i,j,k}\)表示当前加到i号节点,形成j个连通块,还需要k个儿子的方案数

然后考虑枚举当前节点的儿子个数s,发现从前往后做要若\(s\ne0\)时要留下至少一个儿子(限制2)

  1. s=0:两种情况,单独成点,或者变成儿子
  2. s=1:与s=0相同,不过要钦定左右儿子,要乘2
  3. s=2:与s=0相同,还有两种特殊的,在某个儿子上接一个连通块,或向上接一个连通块再向下接一个

然后转移要注意记录方案数

2023.10.17

T1

发现状态数不多,然后直接全部跑处理,然后二维数点

T2

发现修改增加的值的情况只有\(\sqrt{修改次数}\)中,然后就可以打一棵线段树维护,然后每次遍历一边需要修改的点

T3

有一个01串,形如\(a_i\)个\(b_i\)接起来,有一个翻转操作,求至多翻转k次(\(k\in[0,m]\))的最长不下降子序列长度

我们先感性证明一下,对于01翻转,和序列翻转的贡献时一样的

定义简单01串为若干0+若干1

那么x个简单01串可以通过(x-1)次翻转操作归为一个简单01串,所以两个操作是等价的

首先考虑转换一下问题,先把1给选了(设有s1个),然后把0赋予1,1赋予-1,然后找到最大的权值t,容易发现lis长度为t+s1

然后我们要维护的就是就是翻转后的最大前缀和,假如我们已经处理好了一个最大前缀,然后考虑翻转1次后的最大值是什么?

我们发现,找到最大前缀后,然后找到一个最大子段和,如果在前缀中,就把它01翻转,如果在后面,就把如同红色区域翻转,都能记录它的贡献,而且是最优的

所以就转化了要求的东西,找到一个前缀和k段不交子段,使它们的和最大。然后每次贪心选最大子段,发现可能会相交,于是考虑反悔操作,每次取值最大子段,把它翻转,然后下次选时,如果相交,就等价于不选相交的部分

T4

给定序列a,序列p,在a中找到一个上升序列,下标为\(i_1,i_2...\),而且满足\(i_{j-2}\ne p_j\),求上升序列的最大长度

考虑朴素的n^2DP,就是对于普通的求lis的DP,每个\(f_i\)维护4个值,表示选了i为结尾的lis,最大值mx,前驱pre,次大值smx,前驱spre,然后考虑简单的转移,判断p和前驱的关系即可

然后如何优化呢,首先可以想到用a来维护一个前缀最值,然后发现原来实际上维护的二元组,最大值和前驱,还要加一维i,表示结尾,然后就变成三元组。转移的时候就把原来的结尾变成前驱

通过仔细推敲,我们发现维护5个最值即可完成转移,并且要保证5个最值中最多出现两个相同的前驱

为什么呢?

假如p判掉了两个前驱,我们还有3个最值,可以确保结尾至少有两种,也就是可以保证至少有两个新的前驱

然后每次再把两个前驱不同的丢进树状数组里即可

2023.10.19

信心赛...但只切两题...

T1

打标发现,只有x&y=0的二元组的贡献为\(lowbit(x\oplus y+1)\)

然后按位算贡献,或者数位DP

T2

结论题,nm-1

T3

原题链接https://www.luogu.com.cn/problem/P4643

考虑把一条边在两个顶点个挂一半,然后贪心选点即可,字典序最小方案数就双关键字排序

T4

?数学题

给出主视图,侧视图,求最少几个正方体

排序,直接贪,肯定同满足行列要求最好

标签:总结,2023.10,然后,CSP,前驱,余数,考虑,联考,翻转
From: https://www.cnblogs.com/zhy114514/p/18032079

相关文章

  • volatile及内存屏障理解总结
    volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些未知的因素更改。volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存......
  • go经典知识及总结
    1.无论sync.Mutex还是其衍生品都会提示不能复制,但是能够编译运行加锁后复制变量,会将锁的状态也复制,所以mu1其实是已经加锁状态,再加锁会死锁.所以此题的答案是fatalerror;typeMyMutexstruct{countintsync.Mutex}funcmain(){varmuMyMutexmu.L......
  • 机器人基础总结
    刚体在三维空间中有六个自由度的运动——三个是平移(线性运动),三个是旋转(角运动)。尽管刚体有六个运动自由度,我们通常使用三维向量来表达其动力学。\[f=ma_c\]\[\mathbf{n}_C=I\dot{\boldsymbol{\omega}}+\boldsymbol{\omega}\timesI\boldsymbol{\omega}\]达了作用于刚体......
  • 寒假集训总结
    寒假集训总结2024-02-2410:30星期六元宵节第一次寒假集训正式结束sometingtosay寒假的14/22我们都在学校中集训,课程总量比高一上学期所有课加起来还多,14天经历下来确实感受到了集训给人带来的非凡意义1.首先因为没有太多的假期能让我们大脑停机,每天都有一定的思考量,能保......
  • 寒假集训总结
    快啊很快啊本来觉得寒假用来集训会觉得很漫长但真正开始才明白做热爱的事确实不会无聊学完了基础dp树状数组线段树还有单调队列单调栈内容很多啊估计放到日常得学一个半月学的一知半解的尤其是树状数组可能是题库里的太简单了是我低估了。。今天早上教练把cf的比赛......
  • 寒假集训总结
    集训总结:    总的来说,集训确实是辛苦的,但是也有很多的快乐。经过一个假期的集训,学到了很多东西,同时更是深刻的认识到了自己许多的不足之处。    这些天,做了不少的题,板子大概是都熟练掌握了吧,但是在遇到一些难题时又几乎想不出思路,如何能在面对难题时更快的想出思......
  • The First 寒假集训の小总结
    转眼间十五天的寒假集训已经结束,也学习到了许多新知识,dp,线段树,单调栈和单调队列......,假期过得还是很有意义的,虽然我的两次考试成绩不尽人意(只能怪我自己没有好好理解知识点还有好好做题),但OI之路还任重而道远,集训与考试可以说是对我的一次极大磨练,新学期的学习中我要首先把心态端......
  • 寒假集训总结
    内容寒假集训不知道多少天(懒得数了),一共八个大专题:五大DP(总结已写),树状数组,线段树,单调队列单调栈。树状数组和线段树有共通之处,基本都可以维护区间或者单点的各种东西,线段树可以区间加(线段树也可以,用lazy甚至更好)。单调队列和单调栈感觉很神奇,总能用在我想不到的地方,据了解它还可......
  • 寒假集训总结(2024/2/24)
    先说考试t1:一眼线段树,但是,我非得加那个特判,导致在特判里的return0忘改了,直接把0以后的答案吃了,挂了75分(吐槽:大样例里为什么一个0也没有,服啦)。t2:一眼树上背包,第二眼1e9的数据范围,背包开不了一点。t3:没看出来是dp,打了个自己都不知道为啥的暴力,过了四个点,还不错。t4:这题真离谱,......
  • 题目总结
    CF559C-GeraldandGiantChess一道数学+DP的\(\color{#3498DB}\texttt{提高+/省选-}\)题。题目要求求从\((1,1)\)点到\((h,w)\)点不经过黑色方格的路径数。解题思路观察数据范围,可以发现数据范围大概率与\(n\)有关。首先,不考虑黑色方格,易发现路径数为\(\math......