CF1654CDE 题解
CF1654CDE 题解
CF1654C
有一块大小为任意正整数蛋糕,可进行以下操作任意次(可以是 $0$ 次)得到一个无序蛋糕的集合:
- 选择一块蛋糕,它的大小为 $w$,则切为 $\lfloor\dfrac{w}{2}\rfloor$ 和 $\lceil\dfrac{w}{2}\rceil$ 两块放回;
现在给一个有 $n$ 个蛋糕的集合 $a$,问是否合法,即能否通过若干次操作得到这样一个蛋糕集合。
$1 \le n \le 2 \times 10^5$,$1 \le a_i \le 10^9$。
sb 题,没有想到怎么水的题我做了一个小时。考虑倒着做,计算出 $\sum{a_i}$ 放入一个队列,每次取出队头,如果 $a$ 中有这个数就把这个数删去,没有就把队头裂开放到队尾。
比赛时的实现很糟糕,还用了排序和大根堆。
CODE
1 |
|
CF1654D
给定一棵树,有边权有点权,点权都是正整数。一条边 $(u,v)$ 的边权 $(x,y)$ 表示 $a_u:a_v=x:y$。求出一组和最小的点权,满足这 $n - 1$ 条边权,输出这个和,答案对 $998244353$ 取模。
$2 \le n \le2 \times10^5$,$1 \le x,y \le n$。
比赛的时候方向是对的。。。就是没利用 $x,y$ 的范围,然后就GG了。
钦定 1 号点的点权为 1,我们就可以用 所有点权的分数表达形式,即 中的 和 ,这里 和 是互质的。因为 所以 是 的倍数,因此 的最小值就是 ,。这样就可以求出每个点权了,整理一下就是 。
这时候有个很严重的问题:$x_i$ 和 $y_i$ 可能很大,会爆炸。然后我们发现 $x,y$ 只有 2e5
,因此我们可以把 $x_i$ 和 $y_i$ 用分解质因数的方式来表示。求最大公倍数的话只要对于所有质因数取指数的最大值即可。具体实现看代码吧。
不算预处理的话复杂度 $O(n\log n)$。
CODE
1 |
|
CF1654E
给定长度 $n$ 的序列 $a$,求最少改变多少个数的值,使这 $n$ 个数形成等差数列。
$1\le n \le 10^5$,$1\le a_i\le 10^5$。
将问题放到二维坐标系上,每个点的坐标为 $(i,a_i)$ 。考虑等差数列的几何意义是一条直线,可以问题转化为求一条直线最多经过多少个点。
根号分治,设坐标的最大值为 $m$:
考虑当斜率的绝对值小于等于 $\sqrt m$ 时的情况,知道斜率我们就可以对于每个点求出截距,开个桶记录截距出现的次数,取最大值即可,复杂度 $O(n\sqrt m)$;
斜率的绝对值大于 $\sqrt m$ 时,显然直线最远端两点横向距离不超过 $\sqrt m$,否则一乘就超过最大值 $m$ 了。所以类似的,对于一个点,枚举它后面的 $\sqrt m$ 个点,将这两点的斜率加入桶,取最大值即可,同样 $O(n\sqrt m)$。
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!