• 实现a,b交换

image.png

  • image.png
  • image.png

    点名

image.png

解题方法

  • 使用异或,得到剩余的那个同学学号。

image.png
将所有人的学号异或,再以其中一位1作分割,两位没来的同学一定分布在两堆人中。

NC110113

image.png

解题方法

image.png

  • 如果考虑枚举两个点,还需要枚举第三个点,使得能够保证组成一个三角形,时间复杂度为O(n^3)过高。因此考虑优化。
  • 试图枚举边,将所有边存储下来O(n^2),并且记录了边的开头和结尾连线的点以及边的长度。
  • 将边按边长度从大到小排序,每次枚举一条边,记录该点连向的点。在连接边的时候,检查这条边的两个端点,是否有同一个相连的点。如果有,则该边可以组成三角形,并且由于是从大到小枚举,因此是长度较短边。
  • 由于枚举边的时间复杂度为O(n^2),我们需要在检查该点连向点这一步作优化,即可以使用一个bitset, bitset<长度> 数组名[数组长度],这样通过对两个点作与操作即可判断是否有连向相同点。
  • 同时bitset支持下标取数,因此可以直接使用下标,来修改bitset的值。

月月查华华的手机

image.png

解题思路

  • 预处理一遍,从后到前枚举小华的字符串,用Last数组记录当前每个字母最近的位置。
  • 使用next二维数组,记录每个点之后最近的每个字母的位置。
  • 这样从前到后枚举小姐姐的字符串时,直接使用next数组进行定位下一个字符的位置。