版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

仓库源文站点原文


title: 题解 - [Luogu P4896]【Oier们的烦恼】 categories:


题目

这么好的题怎么能没有"位掩码"题解呢(滑稽

<!--more-->

大致思路就是用一个 char 来记录老师是否在机房和学生是否被抓到(一共需要 3+5=8 位来记录, 正好是一个 char), 再用一个 char 记录被抓到的学生的编号, 就像这样:

char in_room, dead;
//in_room的1~3位记录老师, 4~8位记录学生

然而为了降低调试难度, 我们可以用两个 char 分别记录老师和学生的状态, 就像这样:

char onlineT, onlineS, deadS;
//按字面意思理解即可

我们还需要定义一些函数来对它们进行操作, 就像这样(这里以宏定义为例):

#define _teacher_in(i) onlineT |= 1 << i      //老师进机房
#define _teacher_out(i) onlineT &= ~(1 << i)  //老师出机房
#define _student_in(i) onlineS |= 1 << i      //学生开始玩游戏
#define _student_out(i) onlineS &= ~(1 << i)  //学生停止玩游戏
#define _dead(i) deadS&(1 << i)               //查询学生是否被发现
#define _kill_student deadS |= onlineS        //学生被发现

其他就没什么了, 可以参照其他题解没错我就是懒(理直气壮