[CF1285] Codeforces Round #613 (Div. 2)
Codeforces Round #613 (Div. 2)
Announcement (en) Tutorial (en)
A - Mezo Playing Zoma
B - Just Eat It!
C - Fadi and LCM
将\(X\)素因数分解时,犯了个智障错误:没有考虑\(X\)是素数的情况。TLE!
其实只需枚举\(X\)的因数即可。
D - Dr. Evil Underscores
最大化题,直接分治即可。(想了挺久……)
E - Delete a Segment
思维/数据结构题。
我的做法
可以直接用不下传标记的线段树(+离散化……)水过去……
题解
由于线段的数目较难计数,改为计数线段的右端点数目。
每个线段有三种情况:
- 不删除时会对答案造成贡献
- 某其他线段删除时有贡献
- 无贡献
扫描统计即可。
F - Classical?
订正
数论(+栈)题……
转化:将每个数的因数加入数列中,只需使得两个互素的数的乘积最大即可。注意:只需要乘积最大,不要求为每个数找最优解。
直觉告诉我们,只要为某个大数找另一个大数即可。
考虑从大到小扫描,用一个数据结构\(s\)维护已经扫描的数。当栈里有(其他)与当前的数\(x\)互素的数\(y\)时,\(s\)中最小的数\(z\)可以去掉。(这是因为\(xy>xz\),\(z\)不能使答案更优)
如何判断某集合\(s\)中是否有与\(x\)互素的数?由于
\[\mu*1=e \iff \sum_{d|x}\mu(d) = [x=1]
\]
故
\[\sum_{d|x}[d|y]\mu(d) = [gcd(x,y)=1]
\]
用另外一个数组保存\([d|y]\mu(d)\)的值即可。
预处理每个数的所有因数,复杂度\(O(\sum_{i=0}^n\sigma_0(i))=O(n\log n)\)
UPDATE:有边界情况被hack了
2
1 1