# Codeforces Round #481 (Div. 3)

_vb92xHWx8zQTc_34

A. Remove Duplicates

题意:给一个数列,求只保留每个数出现的最后一次的结果。

\(n \leq 50\)\(a_i \leq 1000\)

题解:开个桶,正反各扫一遍。

\(O(n)\)

B. File Name

题意:给一个字符串,求至少删除多少个字符,使得没有子串 “xxx”。

\(n \leq 100\)

题解:把所有 \(x\) 的连续段求出来,答案就是 \(\sum max(length-2,0)\)

\(O(n)\)

C. Letters

题意:有一个序列 \(a_1,a_2\cdots a_n\) 表示第 \(i\) 层有 \(a_i\) 个位置,有人来的话尽量安排层数低的位置,\(m\) 次询问来的第 \(k\) 个人在第几层第几个,\(k\) 递增。

\(n,m \leq 2*10^5\)\(a_i \leq 10^{10}\)

题解:双指针扫一下就没了?

\(O(n+m)\)

D. Almost Arithmetic Progression

题意:给一个序列 \(a_1 \cdots a_n\) ,问能不能把每个元素加减不超过 \(1\) ,变成等差数列,能的话输出最小改动次数,否则输出-1。

\(n \leq 10^5\)

题解:排序,枚举 \(a_1,a_2\) 是谁,每次数一下要改几个。

\(O(n\log n+9n)\)

E. Bus Video System

题意:有一辆公交车,给出每站上/下人数以及车的容量,求有几种可能的初始人数。

题解:假设一开始没人,模拟一遍,把最小值最大值记下来,答案就是 \(n-(mx-mn)+1\)

\(O(n)\)

F. Mentors

题意:给一个无向图,求每个点的权值比几个和它没有连边的点的权值大。

\(n,m \leq 2 \times 10^5\)\(a_i \leq 10^9\)

题解:先求出每个点权值的排名,再减去有连边的比它小的。

\(O(n\log n+m)\)

G. Petya's Exams

题意:给 \(m\) 个三元组 \(l_i,r_i,x_i\),问是否存在一个长度为 \(n\) 的序列满足 \(a_{r_i} =n+1\)\(l_i\)\(r_i\)\(\geq x_i\)\(i\)

\(1 \leq m \leq n \leq 100\)

题解:按右端点排序,从左到右填过去。

稍微证一下为什么这样最优:

考虑按右端点排序之后前面的区间填完对后面的影响,如果和后面的包含前面的,怎么填都一样。否则的话后面的左端点一定比前面的大,前面的从左往右填最优。

\(O(n+m \log m)\)

posted @ 2020-05-19 09:38  daduda  阅读(108)  评论(0)    收藏  举报