Codeforces Round #327 (Div. 1)题解

本文详细解析了Codeforces Round #327 (Div. 1)比赛中的五道题目。涵盖了字符串操作、二维平面上的最短路径、地图联通问题、序列优化和子串关系等算法问题。通过对每道题目的分析,探讨了模拟、二分查找、最短路径计算、动态规划和图论等相关算法的应用。

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

A:给出一个01串,每次把一个位置 i 上的数a[i]变成{ a[i],a[i+1],a[i1] }的中位数(两端不变),问几次之后这个串不再发生变化。

分析:模拟尝试发现假如 a[i] 和任意相邻的数相同则他永远都不会再发生变化,因此要考虑的就是连续的01串,这里也之要根据连续01串长奇偶性讨论下即可

B:二维平面给出起点,终点坐标,要求静止时的速度不超过vmax,风的影响也是一个二维向量,前t时间内是(vx1,vy1),之后的时间内是(vx2,vy2),问最少需要多少时间从起点到终点。

分析:一眼看上去好像并不可做,不妨考虑二分答案,由于时间确定之后风的影响也随之确定,于是计算新起点到新终点每风的情况下的最短时间是否在二分的范围内即可

C:给出一张N*M( n,m<=103 )的地图,有1,2,3三个连通块,现在要尽可能少的在的’.’上建桥(桥可以联通周围上下左右4个格子),使得123联通,问最少需要建几座桥。

分析:由于总共只有3个联通块,只有两种要考虑的情况:
1.三个联通块都和一个点联通
2.三个联通块都和其中一个联通块联通
因此只需从每个联通块开始bfs求一遍到其他联通块和点的最短路径即可

D:给出一个长为n的序列,要求通过交换相邻两个数,在交换次数<=s的情况下要求前K个的权值和尽可能小( n,k<=150,s<=1e9

分析:很显然,s的数据范围是骗人的,因为交换最多 n2 次,假设最后前k个是哪些都知道了,那么该如何计算最小交换次数呢,很显然,只要贪心的按照这k个在原数列中的相对位置依次交换到1-k的位置即可;因此对于本题,我们只需要dp前k个数选哪些即可,dp[i][j][t]代表前i个数,已经放了j个,已经用了t的逆序所能产生的最小值,转移就枚举放或不放,总复杂度是 On4

E:给出n个串( n<=750 ),选出最多的串,要求其中任意两个串都不是子串关系。保证串长总长不会超过 107

分析:子串关系显然是ac自动机fail树上搞搞就可以了,使用 last (即后缀链接),很容易在 O(Len) 时间内建出包含关系的图,注意到这个子串关系是偏序关系(图是有向无环图),题目就是让我们求这个DAG的最长反链。根据Dilworth theorem,最长反链=最小链剖分,只需要floyd之后求最小点覆盖即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值