CF1846题解

洛谷题面
T1,T2,T4没什么价值,建议跳过,在此不提供T1,T2题解,套题T5,T7较为精彩,个人安利一下

T3

题面翻译

给定 n个人做 m个题的时间分布情况,每题得一分,每题的完成时间是这道题的罚时,排名按照得分为第一关键字升序,罚时为第二关键字降序,计算在所有人都按最优顺序做题的情况下,第 1个人的排名。

此题做法

贪心选择所用时间最短的,既保证了能做的题最多,又保证了罚时最少。

T4

题面翻译

计算几何简单题,推荐忽略。

给定一些关于y轴对称,底边平行x轴的三角形,求三角形面积并。

此题做法

对于每个三角形,求出其露在外边的梯形即可。

T5

题面翻译

询问 T 次:是否存在一个满 k(k≥2) 叉树节点数恰好为 n,且叶子节点到根的路径上至少有 3个节点。

数据范围:\(T\in[1,10^4]\),\(n\in[1,10^{18}]\)

此题做法

考虑列出式子,深度为d的满k叉树节点个数:​\(s=\frac{k^d-1}{k-1}\)​,\(d>=3\)(可由等比数列求和公式得到)

容易发现k在​\(\sqrt{n}\)​的量级,d在log n的量级,直接暴力枚举k,d并判断是否等于n是​\(T\sqrt{n}logn\)​的复杂度,无法接受,考虑优化。

我们考虑此类题型的一个常见套路:分值域选策略,即对于较小值域带来答案选择一个策略(通常是较复杂的),较大值域带来答案选择另一个策略(通常较简单)。

我们发现,当\(k>=10^6\),d只能取3,又由于随着k的增大,s具有单调性,可以二分答案解决;\(k<=10^6\),带来的所有答案在\(10^6\log{10^6}\)量级,我们可以预处理出\(10^{18}\)以内的所有答案并丢到map里边。

总结:套路-分值域策略。

T6

题面翻译

交互题,给定一个长度为n的序列,其中有一个异常数字,最多每两轮就会改变一次(最晚第二轮操作后,第四轮操作后),每轮打乱整个序列重新排序。你可以不操作,删除某些数字,并在5次操作内指出异常数字位置。注意你不能删除异常数字。

数据范围:T<=1000(多测),n<=200

此题做法

前两轮啥也不能干,因为不确定异常数字是谁。第三轮操作前异常数字会变成另一个,那么我们可以把除了与异常数字变化后的数不相等的数都删了(这样也方便之后判断时去除其他干扰)。第四轮啥也不能干,因为不确定在哪。然后第5轮它变一下就知道是谁了。这道题一切都很自然就做完了。

T7

题面翻译

给定十位以内01串作为状态,一共m种操作,每个操作:花费代价​\(c_i\)​,异或上与状态​\(a_i\)​的并集然后或上状态​\(b_i\)​,求全部归零的最小代价。

数据范围:\(\sum{m}<=1000\)

此题做法

首先总状态数为​​​\(2^{10}=1024\)​​​,并不大,容易想到状压dp,即​​\(dp[s]\)​​表示状态s全部归零的最小代价,时间复杂度​\(2^{10}1000\)​,然后就过了?

不不不,你的无后效性呢?怎么枚举?怎么确定一个点不会被再次更新?总不能每个点被更新以后在更新这个点所有的可达点吧,这样就\(10^9\)了...

我们列出式子,观察形式:​​\(dp[s]=min(dp[t]+c_i)\)​且​\(t\ xor\ (s∪a_i) |b_i=s\)​​,发现这个东西形如dijsktra的\(dis[i]=min(dis[j]+w)\),然后发现边和点的数量级可以接受,就做完了。

这启示我们,及时列出式子,可以减少许多不必要的思维量,同时也要记好常见算法所解决问题的式子形式。


posted @ 2024-11-20 13:48  chenruikang's_blog  阅读(87)  评论(0)    收藏  举报