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 \times 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] \times p_j\),即当前未在缓存区中的视频的被选中概率之和,那么转移方程为
\[f_{i+2^j}=f_{i+2^j}+f_i \times \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 \times P_S+p_i \times P_S^2+\cdots+p_i \times P_S^x\),当 \(x \rightarrow \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 \times 10^5+nlog(1.5 \times 10^5)) + O(2.5 \times 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\) 满足 \(\biggl\lfloor\dfrac{n}{a}\biggr\rfloor=\biggl\lfloor\dfrac{n}{b}\biggr\rfloor\),即存在 \(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\) 满足 \(\biggl\lfloor\dfrac{n}{a}\biggr\rfloor=\biggl\lfloor\dfrac{n}{b}\biggr\rfloor=\biggl\lfloor\dfrac{n}{c}\biggr\rfloor\),则 \(f(a)\) 中的数不能同时出现在 \(f(b),f(c)\) 中数的位置上,且在 \(f(a)\) 中数的位置上不能同时出现 \(f(b),f(c)\) 中的数

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

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

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

Codeforces Round 363 Div. 1 (A,B,C,D,E,F)的更多相关文章

  1. Codeforces Round #363 (Div. 2)

    A题 http://codeforces.com/problemset/problem/699/A 非常的水,两个相向而行,且间距最小的点,搜一遍就是答案了. #include <cstdio& ...

  2. Codeforces Round #363 (Div. 1) B. Fix a Tree 树的拆环

    题目链接:http://codeforces.com/problemset/problem/698/B题意:告诉你n个节点当前的父节点,修改最少的点的父节点使之变成一棵有根树.思路:拆环.题解:htt ...

  3. Codeforces Round #363 (Div. 2) D. Fix a Tree —— 并查集

    题目链接:http://codeforces.com/contest/699/problem/D D. Fix a Tree time limit per test 2 seconds memory ...

  4. Codeforces Round #363 (Div. 2) B. One Bomb —— 技巧

    题目链接:http://codeforces.com/contest/699/problem/B 题解: 首先统计每行每列出现'*'的次数,以及'*'出现的总次数,得到r[n]和c[m]数组,以及su ...

  5. Codeforces Round #363 (Div. 2) C. Vacations —— DP

    题目链接:http://codeforces.com/contest/699/problem/C 题解: 1.可知每天有三个状态:1.contest ,2.gym,3.rest. 2.所以设dp[i] ...

  6. Codeforces Round #363 (Div. 2)A-D

    699A 题意:在一根数轴上有n个东西以相同的速率1m/s在运动,给出他们的坐标以及运动方向,问最快发生的碰撞在什么时候 思路:遍历一遍坐标,看那两个相邻的可能相撞,更新ans #include< ...

  7. Codeforces Round #363 Div.2[111110]

    好久没做手生了,不然前四道都是能A的,当然,正常发挥也是菜. A:Launch of Collider 题意:20万个点排在一条直线上,其坐标均为偶数.从某一时刻开始向左或向右运动,速度为每秒1个单位 ...

  8. Codeforces Round #363 (Div. 2) One Bomb

    One Bomb 题意: 只有一个炸弹,并且一个只能炸一行和一列的'*',问最后能否炸完所以'*',如果可以输出炸弹坐标 题解: 这题做的时候真的没什么好想法,明知道b题应该不难,但只会瞎写,最后越写 ...

  9. Codeforces Round #363 (Div. 2)->C. Vacations

    C. Vacations time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

随机推荐

  1. 洛谷 P3130 [USACO15DEC]计数haybalesCounting Haybales

    P3130 [USACO15DEC]计数haybalesCounting Haybales 题目描述 Farmer John is trying to hire contractors to help ...

  2. atitit.jndi的架构与原理以及资源配置and单元測试实践

    atitit.jndi的架构与原理以及资源配置and单元測试实践 1. jndi架构 1 2. jndi实现原理 3 3. jndi资源配置 3 3.1. resin  <database> ...

  3. RvmTranslator6.5 is released

    RvmTranslator6.5 is released eryar@163.com RvmTranslator can translate the RVM file exported by AVEV ...

  4. ios in-house 公布整个过程(startssl认证)

    首先大体说一下步骤: 1.申请苹果enterprise 账号 为应用生成app id,provision profile等 详见:http://www.th7.cn/Program/IOS/20131 ...

  5. 调用google翻译

    1. [代码]maven依赖     ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <dependency>     <groupId>org.a ...

  6. 荣获CCF(中国计算机学会)高级会员代表资格

    详细地址:http://www.ccf.org.cn/sites/ccf/xjhydb.jsp?contentId=2624287722908 650) this.width=650;" b ...

  7. java(面向对象 )

    java面向对象的语言 对象:真实存在唯一的事物. 类:实际就是对某种类型事物的共性属性与行为的抽取. 面向对象的计算机语言核心思想: 找适合的对象做适合的事情. 如何找适合的对象: 1.sun已经定 ...

  8. HDU 4731 Minimum palindrome 打表找规律

    http://acm.hdu.edu.cn/showproblem.php?pid=4731 就做了两道...也就这题还能发博客了...虽然也是水题 先暴力DFS打表找规律...发现4个一组循环节.. ...

  9. CSS 文本样式

    1. 文本样式 text <!--文本颜色color --> .text {color:red;} 2. 文本对齐方式    text-align <style> .text ...

  10. 今日SGU 5.8

    SGU 109 题意:一个n*n的矩形,起点在1,1然后每次给你一个操作,走ki步,然后你可以删除任意一个点这次步走不到的,删了就不能再走了,然后问构造这种操作,使得最后删除n*n-1个点 剩下一个点 ...