# 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)\)
浙公网安备 33010602011771号