- 实现a,b交换
解题方法
- 使用异或,得到剩余的那个同学学号。
将所有人的学号异或,再以其中一位1作分割,两位没来的同学一定分布在两堆人中。
NC110113
解题方法
- 如果考虑枚举两个点,还需要枚举第三个点,使得能够保证组成一个三角形,时间复杂度为O(n^3)过高。因此考虑优化。
- 试图枚举边,将所有边存储下来O(n^2),并且记录了边的开头和结尾连线的点以及边的长度。
- 将边按边长度从大到小排序,每次枚举一条边,记录该点连向的点。在连接边的时候,检查这条边的两个端点,是否有同一个相连的点。如果有,则该边可以组成三角形,并且由于是从大到小枚举,因此是长度较短边。
- 由于枚举边的时间复杂度为O(n^2),我们需要在检查该点连向点这一步作优化,即可以使用一个bitset, bitset<长度> 数组名[数组长度],这样通过对两个点作与操作即可判断是否有连向相同点。
- 同时bitset支持下标取数,因此可以直接使用下标,来修改bitset的值。
月月查华华的手机
解题思路
- 预处理一遍,从后到前枚举小华的字符串,用Last数组记录当前每个字母最近的位置。
- 使用next二维数组,记录每个点之后最近的每个字母的位置。
- 这样从前到后枚举小姐姐的字符串时,直接使用next数组进行定位下一个字符的位置。