Codeforces Round 363 Div. 1 (A,B,C,D,E,F)

Codeforces Round 363 Div. 1

题目链接:## 点击打开链接

A. Vacations (1s, 256MB)

题目大意:给定连续 (n) 天,每天为如下四种状态之一:

  • 不能进行运动或比赛
  • 可以进行运动但不能比赛
  • 可以进行比赛但不能运动
  • 可以进行比赛或运动

对于每天,可以根据当天的状态选择运动,比赛或休息。但不能连续两天的选择均为运动或均为比赛。求在这 (n) 天中最少需要休息多少天。

数据范围:(n leq 100)

简要题解:(f_{i,0},f_{i,1},f_{i,2}) 分别表示考虑了前 (i) 天,且最后一天为运动,比赛和休息时最少需要休息的天数。显然可以从状态 (f_{i-1,0},f_{i-1,1},f_{i-1,2}) 转移过来。

时空复杂度:(O(n) + O(n))

关键字:动态规划,dp

B. Fix a Tree (2s, 256MB)

题目大意:对于一个可以表示有根树的数列 ({p_n}),其有:

  • 数列中有且仅有一项 (r) 满足 (p_r=r),即为根
  • 其他的 (n-1) 项表示结点 (i) 和结点 (p_i) 间有一条边

现给定数列 ({a_n}),求至少要改变其中的多少项,才能使 ({a_n}) 能表示一棵有根树。

数据范围:(2 leq n leq 2 imes 10^5)(1 leq a_i leq n)

简要题解:不妨先在所有的 (i)(a_i) 间连一条边,那么生成的图为一些边和一些环(包括自环)。如果存在 (r) 使得 (a_r=r),则令 (r) 为根即可,否则可以任意选择一个结点作为根。而当根 (r) 确定后,只要将环中的任意一个结点所连出的边改为连向根 (r) 即可。具体实现可以借助并查集。

时空复杂度:(O(n alpha (n)) + O(n))

关键字:并查集,图论

C. LRU (2s, 256MB)

题目大意:(n) 个视频和一个可以存放 (k) 个视频的缓存区。在每次操作中,第 (i) 个视频将有 (p_i) 的概率会被选中,若被选中的视频不在缓存区中,则将其加入缓存区。如果缓存区已满,则将最早加入的视频移出,将被选中视频加入。求经过 (10^{100}) 次操作后各个物品在缓存区中的概率。

数据范围:(1 leq k leq n leq 20)

解法一:注意到最后一次加入的视频必定在缓存区中,而第一次加入的视频几乎对结果没有任何影响,所以我们可以倒过来考虑这些操作。令 (g_{ij}) 为第 (i) 个视频被倒数第 (j) 个加入的概率,则第 (i) 个视频最终在缓冲区中的概率 (ans_i=sum_{j=1}^k g_{ij})。可以考虑用状态压缩动态规划来解决这个问题。令 (a_i) 表示 (i) 的二进制表示中 (1) 的个数,令 (f_i) 表示倒数加入 (a_i) 个视频后缓存区中视频存在状态为 (i)(i) 中的 (1) 表示在缓存区中)的概率,令 (s_i=sum_{j=0}^{n-1} [i~verb>&>~2^j= 0] imes p_j),即当前未在缓存区中的视频的被选中概率之和,那么转移方程为

[f_{i+2^j}=f_{i+2^j}+f_i imes frac{p_j}{s_i}~~(i~verb>&>~2^j= 0) ]

转移的同时将答案 (ans_j) 更新即可。

时空复杂度:(O(n2^n) + O(2^n))

解法二:可以依次计算第 (i) 个视频最终在缓存区中的概率。考虑视频 (i),设当其最后一次被选中后,又进行了 (x) 次选择操作。若最终视频 (i) 在缓冲区中,那么这 (x) 次操作最多涉及到 (k-1) 种不同的视频。考虑任意一个含有 (k-1) 种视频的集合 (S)(不能包括视频 (i)),令集合 (S) 中所有视频的被选中概率之和为 (P_S),则上面这些情况发生的概率为 (p_i+p_i imes P_S+p_i imes P_S^2+cdots+p_i imes P_S^x),当 (x ightarrow infty) 时,其等于 (frac{p_i}{1-P_S})。若枚举所有的 (S),将概率累加,会发现含有 (k-2,k-3,cdots) 种不同视频的情况会被重复计算多次。于是再枚举含有 (k-2) 种视频的集合 (S'),考虑到其概率在枚举所有的 (S(S' subseteq S)) 时均被计算了一次,故将其减去 (C_{(n-1)-(k-2)}^{(k-1 )-(k-2)}) 次即可。接下来再枚举含有 (k-3) 种视频的集合 (S''),依次类推。注意到这是一个容斥的过程,可以预处理出容斥的系数,计算时直接调用即可。

时空复杂度:(O(n2^n) + O(2^n))

关键字:概率论,动态规划,容斥原理

D. Limak and Shooting Points (3s, 256MB)

题目大意:(k) 块传送石位于 ((ax_i,ay_i))(n) 个怪物位于 ((mx_i,my_i)),保证这 (k+n) 个位置互不相同。可以在传送石位置向任意方向射箭,箭会攻击到该方向上的第一个怪物,同时怪物和箭均会消失。现在可以以任意顺序利用这 (k) 块传送石向任意方向射箭,但在每块传送石处只能射出一箭,求有多少怪物可能被射到。

数据范围:(1 leq k leq 7)(1 leq n leq 1000)(-10^9 leq ax_i,ay_i,mx_i,my_i leq 10^9)

简要题解:枚举所有利用传送石顺序的排列 (P),检验是否能以该顺序使用传送石来射中怪物 (i)。具体用递归来进行判断。令状态 ((j,s)) 表示正在使用第 (P_j) 个传送石,当前要射击的怪物集合为 (s),初始时 (s={i})。每次认为将要在 (P_j) 处射到 (s) 中的第一个怪物 (s_1),但可能在该方向上存在其余怪物 (t_1,t_2,cdots,t_m) 遮挡住 (P_j) 射向 (s_1) 的箭,故接下来这些怪物将要被射掉。于是转移到状态 ((j+1,s')) 继续进行上述过程,其中 (s'=s-{s_1}+{t_1,t_2,cdots,t_m}),当 (s') 为空时,说明怪物 (i) 可以被射到。

时空复杂度:(O(k! cdot nlogn) + O(kn))

关键字:极角排序,模拟,搜索

E. Cron (3s, 256MB)

题目大意:给定 (s,m,h,day,date,month) 参数用以描述一个工作时刻,其中 (s) 为秒,(m) 为分钟,(h) 为小时,(day) 为星期几,(date) 为日,(month) 为月。当其中有 (-1) 时表示该参数可以为任意值,当 (day)(date) 同时不为 (-1) 时认为两者任一可以为任意值。假定当前时刻为 00:00:00 January 1st, 1970 (Thursday)。现有 (n) 个询问 (t_i),对于每个询问,求 (t_i) 秒后第一个工作时刻距当前时刻多少秒。

数据范围:(0 leq s,m leq 59)(0 leq h leq 23)(1 leq day leq 7)(1 leq date leq 31)(1 leq month leq 12)(n leq 1000)(0 leq t_i leq 10^{12})

简要题解:注意到参数 (s,m,h) 以每天为一个周期,参数 (day,date,month) 以每 (400) 年为一个周期。考虑将这两种周期中符合条件的时刻按顺序记录下来,对于每个询问直接在这些时刻中二分即可。

时空复杂度:(O(2.5 imes 10^5+nlog(1.5 imes 10^5)) + O(2.5 imes 10^5))

关键字:模拟

F. Coprime Permutation (2s, 256MB)

题目大意:构造一个排列 (p_1,p_2,cdots,p_n) 满足:

[forall_{1 leq i < j leq n} (i,j)=1 iff (p_i,p_j)=1 ]

现已知 (p) 中一些位置的值,求有多少种构造方案。

数据范围:(2 leq n leq 10^6)

简要题解:先不考虑有些位置值已经确定的情况。定义 (f(a)={a,2a,cdots,ma}),其中 ((m+1)a>n)。注意到排列 (1,2,cdots,n) 即为一个满足条件的排列,且其余满足条件的排列必可由该排列通过以下变换得到:

  • 变换一:若数 (i)(j) 含有相同的质因子,则 (i,j) 可以互换位置
  • 变换二:若存在质数 (a,b) 满足 (iggllfloordfrac{n}{a}iggr floor=iggllfloordfrac{n}{b}iggr floor),即存在 (f(a))(f(b)) 一一对应,则可以将对应的数互换位置

可以发现,(1,2,cdots,n) 经过以上两种变换成为新的排列 (p) 后,(p) 应具有以下性质:

  • (i)(p_i) 的质因子数相等
  • 注意到变换二中的 (a,b) 必然大于 (sqrt{n}),从而 (i)(p_i) 小于 (sqrt{n}) 的质因子对应相等,且大于 (sqrt{n}) 的质因子满足变换二中的条件
  • 对于质数 (a,b,c) 满足 (iggllfloordfrac{n}{a}iggr floor=iggllfloordfrac{n}{b}iggr floor=iggllfloordfrac{n}{c}iggr floor),则 (f(a)) 中的数不能同时出现在 (f(b),f(c)) 中数的位置上,且在 (f(a)) 中数的位置上不能同时出现 (f(b),f(c)) 中的数

有了以上性质,对于某些位置的数已经确定的情况,可以很快判断出是否无解。然后阶乘统计答案即可。注意考虑 (1) 的情况。

时空复杂度:(O(nlogn) + O(n))

关键字:结论,数论,排列组合

原文地址:https://www.cnblogs.com/LzyRapx/p/7707246.html