题面:http://codeforces.com/contest/1064/problems
A. Make a triangle!
题意:给定三条边,问每条边需要共增加多少才能组成三角形。
解法:签到。
如果已经满足两边之和大于第三边输出0,否则最短的边增加需要增加的即可。
1 |
|
B. Equations of Mathematical Magic
题意:有一个有趣的式子$a - ( a \oplus x ) - x = 0$,先给定$a$,要求你迅速的求出x。
解法:规律 & 思维
把式子进行变形变为$a - x = a \oplus x$ 从二进制的角度来分析要使式子成立,令$a_i$为$a$第$i$位,$x_i$为$x$第$i$位对于每一位 真值表如下
| $a_i$ | $x_i$ | $xor$ | $a_i - x_i$|
| ——— | ——— | ——— | ——— |
| 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 0 |
| 0 | 1 | 1 | (-1) |
可以发现 对于$a_i$为0时,$x_i$必须为0,而$a_i$为1时,$x_i$为0或1都可以。
所以只要找出a中有多少个为1的位设为n位,答案为$2^n$
1 |
|
C. Oh Those Palindromes
题意:重新排列所有的字符,要求回文子串最多
解法:样例是骗人的,排个序相同的字符连在一起就是最多的。
1 |
|
D. Labyrinth
题意:给定一个图,从起点出发可以向四个方向走。限制向左走和向右走的次数,不限制向上和向下走的次数。问最多能走到多少个点。
解法:01BFS
和普通的搜索不同的是,由于限制了向左走和向右走的次数,会导致单纯的bfs不能搜到所有的点。因为会存在某个点第二次访问到时会更优(左右用的次数更少)从而到达更多的点。
所以要优先考虑使用步数少的点。有两种方法实现。
第一是使用优先队列,每次在队首的都是步数少的。
第二是使用双向队列,将上下走的点放在头部,左右走的点放在尾部。
1 | //优先队列 |
1 | //双向队列 |
E. Dwarves, Hats and Extrasensory Abilities
题意:交互题。有$n$个点,每次你给定一个点,交互系统返回你这个点的颜色,最后需要你找到一条直线使得将所有的点按黑白分割为两个部分。
解法:使用二分的策略。
首先给定$(0,1)$如果黑色,则黑色边界为左半部分,白色为右半部分。否则正好反过来。
然后每次给定$(mid, 1)$如果与第一个颜色相同,则处理右半部分,否则处理左半部分。
由于$n$最大不超过30,所以二分可行。
1 |
|
v1.5.2