csp-s模拟测试54 - 55

本文总结了两次CSP-S模拟测试的经历,包括题目解析、解题思路、算法实现细节及反思等内容。涉及质因数分解、并查集、线段树等数据结构和算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两天炸掉了135分

csp-s模拟测试54

期望得分:100+72+45

实际得分:100+21+31

 

T2有重边,关于邻接矩阵,它死了TAT,挂了记忆化搜索-39。  然后判c=0想到了1点没度,然而我判的mp[1][x]==1,-12

T3单调点,可增可减,然而我只判了增,挂了。

 

说出题人毒瘤,不如说自己太naive。

 

A. x

有相同质因子的一定不能分开,

质因数分解,并查集维护。

 

B. y

2^20让任何算法的复杂度无法招架

meet in the middle思想

分成两部分,然后把状态接起来看是否可行,指数除以2。

mp0/1[i][j]邻接矩阵,[j]放bitset,原因在后面。

设f[i][s][j]表示以i为起点,路径状态s,j为终点的路径是否存在。[j]一维放bitset里

固定一个i为起点,枚举状态s,枚举终点j,然后如果合法转移点用mp0[j]填装f[i][s<<1],1同理,这样复杂度/32

设bitset<>g[s][i]表示状态s在i开始,0/1表示不存在或存在。

然后2^20枚举,合并,bitset直接&看是否可行。

记得在高位放1,区分010和0010

 

 

C. z

$x_{i-1}<x_i<x_{i+1} or x_{i-1}>x_i>x_{i+1}$可以合并,这样可以将位移转化为左右横跳。

任意间隔>l,那么不能一次完成多个任务

化下式子发现在这种情况下答案是一次函数,可以O(1)

用链表维护位移,优先队列维护最小间隔。

 

以上是口胡,还没有改过。

 

 

csp-s模拟测试55

期望得分:100+50+20

实际得分:45+35+20

 

T1快读没开long long挂成暴力分qwq

T2考试结束前10分钟发现部分分打炸(都不喜欢但廉价也可以将就,雾),然后没改完死了。

T3暴力打的很虚,稍优化还好

 

A. 联

一眼线段树

看到1e18值域,想了下序列,发现信息必须分段维护。于是确定线段树。

那只有离散化了,发现答案只可能在1,所有操作的l、r、r+1,把它们加到lsh[]里,这样就能在线段树上保留它们的信息。

支持区间覆盖,区间异或,区间最前0。

发现异或会将最前0和最前1交换,那么维护f0[],f1[]表示区间[l,r]中最靠前的0/1

懒标记lz01[],lzxr[],维护对子区间的覆盖,异或

注意:

区间异或 如果有lz01[]那么把本区间的lz01[]取反,如果没有把本区间的lzxr[]取反

保证覆盖在前,xor在后的正确性

下下传覆盖标记要将子区间的lzxr[]清掉。

保证xor在前,覆盖在后的正确性

down的时候先传覆盖,因为由于以上操作两个懒标记同时存在 一定是先覆盖再xor的操作

 

 

B. 赛

部分分的启示:当两个人喜欢的物品集合不存在交集,那么一定贪心选最小的装满k,然后再选剩下的最小的。

一般情况,如果有交集,那么优先考虑,因为加入一个会减少两个,剩下的选择多了,但交集部分的权值导致不单调。

于是我们枚举交集大小设为r,一定会贪心地从小选。

只被一个人喜欢的部分都贪心选k-r个。

再线段树维护下“剩下的物品”,支持insert,delete,前k小值和。查询下m-p1-p2-i填满m

每次增大r,把选的在线段树中删掉,只被一个人喜欢的物品,可知是弹出最大的,加到线段树里。

最后一定要注意特判、边界。

 

C. 题

神仙题:

对每个点单独考虑。

逆推出如果我要让这个点存活那么要牺牲的点的集合。

答案就是能逆推回去并且牺牲集合没有交集的点对数。

 

转载于:https://www.cnblogs.com/hzoi-yzh/p/11611365.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值