Asia-Jakarata 2018
Contest Info
[Practice Link](http://opentrains.snarknews.info/~ejudge/team.cgi?contest_id=006312)
Solved | A | B | C | D | E | F | G | H | I | J | K | L |
---|---|---|---|---|---|---|---|---|---|---|---|---|
9/12 | O | - | Ø | O | - | O | O | O | O | O | - | O |
- O 在比赛中通过
- Ø 赛后通过
- ! 尝试了但是失败了
- - 没有尝试
Solutions
Problem A. Edit Distance
题意:
给出一个\(01\)字符串\(S\),要求构造一个字符串\(T\),使得\(S\)和\(T\)的编辑距离大于\(\frac{|S|}{2}\)
思路:
- 如果\(S\)中\(0\)和\(1\)的个数不同,那么全都放个数少的那个数。
- 如果\(0\)和\(1\)的个数相同,那么第一位放和\(S\)的第一位相反的,其余的放和\(S\)的第一位相同的
Problem C. Smart Thief
题意:
要求构造一个字符串\(S\),使得它的字符集大小为\(M\),并且至少有\(k\)个长度为\(n\)的本质不同的子串。
输出构造方案,使得\(S\)的长度最小。
思路:
我们考虑\(S\)的长度为\(n + k - 1\)
我们考虑长度为\(n\),字符集大小为\(M\)的字符串,本质不同的一共有\(M^n\)种。
如果\(M^n\)很大,那么我们考虑如下做法:
- 先随机放置\(n - 1\)个字符,然后考虑第\(n\)个字符
- 我们枚举第\(n\)个字符,选择这\(n\)个字符的后\(n - 1\)个字符为前缀的长度为\(n\)的字符串的出现次数最少的来放
- 这样后面的字符能接下去的概率很高,就很容易构造出长度为\(n + k - 1\)的字符。
再考虑\(M^n\)的数量级和\(k\)差不多大的时候,这个时候我们用上述算法可能是行不通的。
因为当\(M^n = k\)的时候,可能构造方式很少。
但是我们可以考虑,一个长度为\(n\)的字符串,它实际上连接了两个长度为\(n - 1\)的前缀。
我们把这样一个长度为\(n\)的字符串看成一条边,可以发现每个长度为\(n - 1\)的前缀都有\(m\)条出边和\(m\)条入边。
现在相当于要找一条长度为\(k\)的欧拉路径,显然存在。
Problem D.Icy Land
题意:
在一个\(n \cdot m\)的图中,'.'表示是冰块,'#‘表示是干的地方。
如果碰到冰块,那么会继续沿当前方向滑下去,除非遇到墙壁,则会停下来。
如果遇到干的地方,便会停下来,然后可以选择一个方向继续前进。
现在询问至少要将多少个'.'变成'#',使得不管从任意位置出发,都可以在每个位置停留下来。
思路:
考虑没有靠墙的冰块都要变干
再考虑外面一圈的情况(不包括四角),至少要有一块干的地方,不然从外面一圈出发的时候就进不到中间区域,只能在外面绕圈圈
Problem F. Popping Balloons
题意:
有两个人\(A, B\),参加一场算法竞赛。
一共有\(n\)道题目,比赛时长\(m\)分钟,他们知道各自完成每道题需要的时间\(a_i, b_i\)。解决一题后会获得一个气球。
现在\(A\)可以骚扰\(B\),当\(A\)获得气球后,它可以选择让气球爆炸来骚扰\(B\)。
当气球爆炸的时候,\(B\)手中正在做的题目会前功尽弃,需要从头开始做。
现在问是否有一种放气球的方案使得\(A\)最终做出的题目严格大于\(B\)的。
思路:
我们尽量想让\(B\)浪费尽可能多的时间。
首先我们知道\(A\)能做多少题,假设为\(p\)。
那么对于\(B\),最多让他做\(p - 1\)道题。
那么我们找到\([1, p]\)中所需时间最长的题,然后将之前所获得的气球全都在这道题快做完的时候放掉。
然后继续找下一个所需时间最长的题,放掉这段时间获得的气球。
这样可以保证浪费\(B\)的时间是最多的。
Problem G. Go Make It Complete
题意:
有\(n\)个点, \(m\)条边的无向图,现在需要选择一个\(k\),然后将没有在图里的边按某种顺序列举出来,然后按顺序判断,如果当前这条边相邻的两个点的度数之和大于等于\(k\),那么就将这条边加入图中。
只要存在某种顺序使得所有边都能加进去,那么这个\(k\)是好的。
现在需要找一个最大的\(k\),并且满足这个\(k\)是好的。
思路:
二分\(k\),然后暴力判断,跑不满。
Problem H. Lexical Sign Sequence
题意:
有\(n\)个数\(a_i \in [-1, 1]\),如果是\(-1\)或者\(1\)表明\(a_i\)是确定的,否则表示你可以选择填\(-1\)或者\(1\)。
现在有\(k\)条限制,你需要满足\(\sum\limits_{i = l}r a+i \geq c\)。
问满足所有限制的条件下,字典序最小的\(a\)是什么。
思路:
先全部放\(1\),然后判是否是\(impossible\).
然后将每个限制条件放在\(r\)处\(check\),如果不满足,那么倒着往左跳\(0\)的位置,改成\(1\)。
链表维护一下。
Problem I. Lie Detector
Problem J. Future Generation
题意:
现在有\(n\)个字符串,对于每个字符串可以选择一个它的子序列,使得选择出的\(n\)个子序列按字典序是单调递增的。
问满足条件的\(n\)个子序列的最大长度和。
思路:
暴力跑出\(n\)个字符串的所有子序列,然后两层之间双指针枚举一下。
Problem L. Binary String
题意:
给出一个二进制串\(S\),和一个\(k\)。
现在问最少删除\(S\)中多少个字符,使得它小于等于\(k\)
思路:
最左边的\(1\)不能动。
然后考虑第二个\(1\)开始,慢慢删。
如果\(1\)全删光了,\(0\)随便删