Codeforces Round 889 (Div. 2)

Codeforces Round 889 (Div. 2)

A. Dalton the Teacher

找出pi=i的位置的数量t,答案即为数量t2

B. Longest Divisors Interval

n能被l,l+1,l+2,...,l+k整除,则n一定能被1,2,...,k+1 整除,证明如下:

首先1显然,l,l+1中一定有2的倍数,l,l+1,l+2 中一定有3的倍数,以此类推。

从2开始枚举因数直到不能整除,即为答案。

C1 & C2. Dual

首先考虑同号的情况,若每个数全为正数,要使序列递增,只需按顺序从2开始对于每个i,将i-1加到i上,这样操作最多需要19次。负数的情况倒序。

考虑如何用12次将所有数变为同号,容易想到的是让绝对值最大的一个数去加到所有与它异号的数上,但是这有可能超过12次,因此统计一下正负数的个数,如果两种数都小于等于12,则可以这样操作,否则,假设负数的个数小于等于7个,这时挑选一个正数,五次对其自身操作将其变为大于20的数,然后加到每个负数上,这样最多也不会超过12次,正数小于等于7个时同理。

D. Earn or Unlock

首先,如果恰好走到了k位置,则1到k之间的数中有k-1会被用来解锁,剩下的可以获得,答案为ansk=sumkk+1
因此只需要确定哪些位置可以恰好到达,求出ansk的最大值即为答案。

考虑dp,设状态f(j)表示是否可以到达j的位置,转移方程为:

f(j)=f(j) or f(jai)(j>=i)

使用bitset优化转移:

dp=dp | (((dp>>i) | ((dp>>i)<<a[i]))<<i)

E. Expected Destruction

将集合看成n个物体在数轴上向右移动,相碰会消失一个。

如果任何两个物体都不相碰,则需要(m+1si)秒,若有两个物体在x的位置相撞,会使答案减小m+1x

我们将碰撞视为只发生在最初相邻两个物体上,这是因为,假设两个物体为i和i + 1,若物体i - 1向前走碰到了i,我肯可以将其视为i - 1消失了,如果i + 1向后移动碰到了i + 2,可以视为i + 2消失了。

因此只需要对于每对最初相邻的物体算出他们在任一位置x相遇的概率p,再将最初的答案减去p(m+1x)即可。

概率使用dp计算,对于两个物体x,y,sx<sy,设f(i)(j)表示x走到i,y走到j的概率,转移方程为:

f(i+1)(j)=f(i+1)(j)+12f(i)(j)(ifi+1j)

f(i)(j+1)=f(i)(j+1)+12f(i)(j)(ifj+1m)

复杂度为O(nm2)

posted @   Mcggvc  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示