CSP-S 诈尸记&题解


题解在最下面

前言

既然都参加了初赛,那就参加一下复赛吧
以后可以吹水:我们可是NOIP时代的人了!!
问:NOIP哪一年取消Pascal
答:NOIP先取消

Day0

其实和Day-1一起两天十一月月考,考完估分530,大概是排名准备×10的节奏。
那就刚好顺便参加个CSP(旅游)散散心。
酒店很好,除了网络是假的,外加门口好像城中村一样
看了看前两天的校内模拟题,没有一道题会做
完了怎么现在的OIer这么厉害

Day1

震惊!早上居然和在学校里一模一样的时间起床,生物钟真的这么厉害吗?
吐槽酒店:辣鸡早餐

比赛

哇举办了NOI就是不一样,用的居然是1920的显示器
T1一看一眼题,emmm我是不是看错题了
T2括号排序?大概一个给1一个给-1搞一搞就行了吧
仔细看了一下,好像给定右端点需要求有多少个合法的左端点,线段树二分一下合法位置就行了吧?
T3什么东西,怎么一点思路都没有
画了半个钟草稿纸什么都想不到
先码T1,调编辑器用3分钟,打代码2分钟,环境变量2分钟,各种猎奇环境gdb等问题10分钟,然后第一题花了20分钟??
T2发现需要一个某个区间内某个数的出现次数,我好像只会主席树。
NOIP好像不考主席树吧?
发现实在没办法,只好开码主席树。
码完除了一个小错误好像就过中样例了。
大样例爆栈?诶开栈参数怎么写的来着?
算了反正大样例这么水什么都调不出来。
算了一下空间,700M?
完了是不是最后20分没了?
卡一卡,搞到180M,给栈60M应该够了吧!
诶怎么11点了?
果然码力不足。
第三题仍然没思路
看数据范围大概是一个个依次贪心判合法直接得到答案。
然后想了几个判合法的方法,打完11:45,小样例全错……
算了10分走人

赛后

什么T2大家都是O(n)?
T3大家都不会?
三个集训队选手也不会?
全校只有BAjimAK了?听说还睡了一个小时?
高一的没几个上200?那前几天那么难的模拟题怎么做的?

下午逛公园
(大概只有像我这种喜欢出去玩的去公园愉悦身心了,其它的怕不都酒店腐了半天

Day2

按照套路Day2是不是难一点?(flag)

比赛

T1一眼不会,两眼不会,然后想到可以反着做,枚举一个不合法然后DP,大概好像就过去了。
T2一眼N^2DP,然后好像也没什么想法
T3暴力送75?正解应该什么换根之类的。
T1打着打着发现复杂度是n^3m,想了好久也想不出怎么优化掉一个n,但是又不太可能是其他做法,84分算了吧(这次比赛一点压力都没有心态极好)
T2先打着 N 2 N^2 N2DP,就是设f[i,j]表示最后一个块是[i,j],然后和T1一样发现变成 N 3 N^3 N3,一脸懵逼的想了很久就是优化不掉。
然后大胆猜了一个结论:每次划分完后最后一个块是尽可能最小的,就变成N^2了
打完发现诶居然是对的。(至少过了大样例)
发现可以单调栈变成一个log,测了一下样例3(极限),比较巧的用它mod了一个数,然后用Python算出标答的mod是多少
发现也是对的
又发现好像单调队列就成O(n)了
再加上高精度
好像是不是win了??
11:10
T3不想了,开始暴力
11:40
考虑二叉树怎么搞,搞了好一会,一直纠结是直接算还是扫那么一两个算
纠结来纠结去,打了直接算,算错了
11:58
啊算了算了55分就55吧

赛后

emmm?没人切T2?全都去搞T3去了?
一堆人表示一题都没切,但是暴力分84+84+75=243也很高的样子

仔细一算好像比去年还高分
哇我去年在干啥啊
果然是活该退役啊

Day2333

emmm
D2T1自测84,得分10??
D2T2爆空间
270滚粗
获得成就:高三获得历年最低成绩

题解

D1T1

直接判断是左边还是右边,按题意操作即可

D1T2

主席树:
左括号为-1,右括号为1,每个节点只需统计右端点在当前节点的就行了,其余从父亲那里累计。
s[]为前缀和,那么[l,r]合法即为 s [ r ] − s [ l − 1 ] = 0 s[r]-s[l-1]=0 s[r]s[l1]=0,且 对 于 任 意 的 l < = i < r , s [ r ] − s [ i ] > = 0 对于任意的l<=i<r,s[r]-s[i]>=0 l<=i<rs[r]s[i]>=0
第二个用线段树二分,第一个二分后在合法区间主席树
栈:
每个节点只需统计右端点在当前节点的就行了,其余从父亲那里累计,设这个值为a。
也就是说a[x]表示以节点x结尾的字符串有多少个子串[l,x]合法,注意是[l,x],即子串的结尾必须是当前节点。
那么只需考虑当前节点r是右括号,此时找到这个右括号对应的左括号l,那么[l,r]合法,且[l,r]是最短的满足结尾在r的合法子串
那么a[r]=a[l-1]+1,即[l,r]之前可以接上多少个合法的子串。

D1T3

考场想的方向是对的,贪心。
假设把一个数字从S移动到T,中途经过的边为S,a1,a2,a3,T
那么显然(S,a1)这条边必须是和S相连的边中最先删的
(a3,T)必须是和T相连的边中最后删的
和ai相邻的边中,(ai-1,ai)必须在(ai,ai+1)之前一个删
将边当做点,按照必要的删边顺序连边,可以且必须得到一个DAG
如果得不到一个DAG就是非法了
如此操作即可,细节懒得想了,反正不存在改题这个东西了对吧

D2T1

考虑用总数减去不合法的,他合法要求全部小于一半,不合法就是有一个大于一半
那么枚举这个不合法的,DP统计
题目要求每行选一个,枚举第p个主要原料不合法
f[i,j,k]表示第i行,第p个选了j次,其它选了k次。这是 n 3 m n^3 m n3m
发现最后算答案的时候并不需要j和k都知道的这么详细,只需j大于k即可
那么f[i,j,k]可以优化为f[i,j-k],直接转移即可

D2T2

猜测结论(还不会证明):
对于区间[1,r],答案在最优情况下,最后一个区间[l,r]中的l一定越大越好,即最后一个区间越小越好
实质上就是上面那个DPf[i,j]中i这一维被优化了,证明应该也可以从这个思路去证明
设f[i]表示[1,i]中最后一个区间的大小,c[]为前缀和
那么当f[j]<c[i]-c[j]时可以f[i]=c[i]-c[j]
也即满足f[j]+c[j]<c[i],用单调队列维护即可

D2T3(口胡)

已知一个节点下所有子节点子树的重心,那么这个节点下子树的重心就可以快速求出
对于子树外的,换根处理
就两行,都说了是口胡了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值