版权声明: 本博客所有文章除特别声明外,均采用 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 //学生被发现
其他就没什么了, 可以参照其他题解没错我就是懒(理直气壮