题目链接
感受:这次能做出5个题,挺意外的,因为很难相信昨天刚学的状态压缩就在今天用上了。我按cf题目顺序说吧。A题一个向上取整输出就行。B1数据量小随便模拟B2考虑
O
(
n
)
O(n)
O(n)算法,用一个队列接着模拟,用map判断是否出现。
O
(
n
)
O(n)
O(n)扫过去出答案。C题也是一个模拟(好多),设立一个下一步能到达的坐标,x,y。然后根据自己的分析写上答案就OK了。
D题线段树+状态压缩,用或运算执行上传操作。具体思路在下面写吧。
E题暴力写的能过。
A题
题目大意:
有六种管道,让你从(0,0)开始走,问能否到大(2,n+1)。
思路:
简单模拟,六种管道实际上就是两种,当遇到第一种管道(横,竖)时必须是横着的,所以这时直接x++,当上方是第二种管道(弯的)那么此时下方必须也是同类型管道,下方同理。
B题
题目大意:
给你一个n和m,每次有n个序列,第i个序列数字i在第一个,然后每次计算这m个数每相邻的两个数的距离和。
思路:
每次更改序列只是把i-1和i的位置交换罢了,交换的这个过程是能直接完成的,那么每次就只剩下计算序列值了,然后可以发现,每次序列更改之后对最终结果有影响的只有i和i-1,然后就记录一下这两个数的位置,每次按位置遍历就行了。每次暴力遍历m个数的话是实打实的 O ( n + m ) O(n+m) O(n+m)会超时。
C题
题目大意:
你会收到来自朋友的信息,你的手机屏幕最多能显示k条信息,当你收到一个朋友的信息,手机屏幕上有他的信息就不管,否则就把屏幕最后一条信息去掉,顶上放新的信息。问最后屏幕上的信息序列。
思路:
模拟就行,我拿了一个队列模拟,水题。
D题
题目大意:
用最低价卖n个商品,用这个最低价卖出商品所得到的钱不能小于原价值,问这个最低价。
思路:
水题。求和之后除n向上取整。
E题
题目大意:
给你一串序列,有两种操作,第一种是把pos处字符改成c,第二种是查询l到r有多少种不同的字符。
思路:
看到这个题直接就能想起线段树,不过这个状态需要变换一下,为什么呢,如果按字符串的形式去查询和更新的话,那么每次上传操作免不了遍历两个区间的字符串,这样建树就能n方,查询和更新就成了nlogn,铁定超时,还不如暴力呢。但是可以进行状态压缩,因为在字符串中每个字符只有两种状态,有或没有,所以可以把字符串压缩成一个26位二进制数的形式,上传操作直接进行或运算,然后每次更改字符时把对应位上的二进制数变成1就行,查询时直接查询这个数字有多少个1.
F题
题目大意:
同C
思路:
同C