[CF1285] Codeforces Round #613 (Div. 2)

Codeforces Round #613 (Div. 2)

Announcement (en) Tutorial (en)

A - Mezo Playing Zoma

a.cpp 68500454

B - Just Eat It!

b.cpp 68506118

C - Fadi and LCM

\(X\)素因数分解时,犯了个智障错误:没有考虑\(X\)是素数的情况。TLE!

其实只需枚举\(X\)的因数即可。

c.cpp 68521043

D - Dr. Evil Underscores

最大化题,直接分治即可。(想了挺久……)

d.cpp 68535431

E - Delete a Segment

思维/数据结构题。

我的做法

可以直接用不下传标记的线段树(+离散化……)水过去……

e.cpp 68569457

题解

由于线段的数目较难计数,改为计数线段的右端点数目。

每个线段有三种情况:

  1. 不删除时会对答案造成贡献
  2. 某其他线段删除时有贡献
  3. 无贡献

扫描统计即可。

e_ans.cpp 68629879

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)\)

f.cpp 68630946

UPDATE:有边界情况被hack了

2
1 1
posted @ 2021-05-20 20:20  frank3215  阅读(65)  评论(0)    收藏  举报