# Codeforces Round #479 (Div. 3)
A. Wrong Subtraction
题意:一次操作可以把一个不是 \(10\) 的整数倍 \(-1\),或者把 \(10\) 的整数倍 \(\div 10\)。求一个数 \(n\) 操作 \(k\) 次的结果。
\(2 \leq n \leq 10^9\),\(1 \leq k \leq 50\),保证答案是正整数。
题解:模拟
\(O(k)\)
B. Two-gram
题意:输出长度为 \(n\) 字符串里出现次数最多的长度为 \(2\) 的子序列。
保证只有大写字母,\(n \leq 100\)
题解:\(cnt_{i,j}\) 表示子序列 \(\{i,j\}\) 出现的次数?
\(O(n+26^2)\)
C. Less or Equal
题意:给定两个数 \(n,k\) 和一个长度为 \(n\) 的序列 \(a_i\),求一个正整数满足有 \(k\) 个数小于或等于它。
\(k\leq n \leq 2 \times 10^5\)
题解:求出第 \(k\) 大,和第 \(k+1\) 大,看下是不是相等的。
\(O(n\log n)\) 或 \(O(n)\)(如果用了一个奇奇怪怪的stl,可以 \(O(n)\) 求数组第 \(k\) 大)
D. Divide by three, multiply by two
题意:有一个 \(n\) 个数的序列 \(a_i\) ,把它重排使得对于所有 \(1 \leq i \leq n-1\) 满足\(a_{i+1}=2a_i\) 或 \(3a_{i+1}=a_i\),保证有解。
\(a_i \leq 3\times 10^{18}\),\(n \leq 100\)。
题解:
答案序列里因子 \(3\) 的个数单调不降,\(2\) 的个数单调不增。
把它双关键字排序,这样的排列一定唯一,否则有两个数 \(2\) 和 \(3\) 的因子个数都相等,没有解,不满足题意。
排完序直接输出即可。
\(O(n \log n \log a)\) 或 \(O(n \log a)\)(排序前预处理) 或 \(O(n \log n)\) (\(2\) 的个数用 \(\text{lowbit}\) 求,把它去掉所有 \(2\) 之后当成 \(3\) 的个数肯定是对的,因为其它质因数大家都是一样的)
E. Cyclic Components
题意:求一个无向图里有几个连通块是简单环。
\(n,m \leq 2 \times 10^5\)
题解:dfs每个连通块,看是否度数全为 \(2\),是的话给答案+1。
\(O(n+m)\)
F. Consecutive Subsequence
题意:求一个序列的最长子序列,使得这个子序列是公差为 \(1\) 的等差数列。
\(n \leq 2 \times 10^5\),\(1\leq a_i \leq 10^9\)
题解:\(dp_i\) 表示以 \(i\) 结尾的满足条件的最长子序列长度,拿一个 map 记录每个数上一次出现位置,转移的时候就是 \(dp_i=dp[mp[i-1]]+1\)。
\(O(n\log n)\) 离散化也行,比较麻烦。
浙公网安备 33010602011771号