2351. 开关门问题

1000ms 256MB 简单 模拟法
题目描述
某校有 $N$ 间教室,且每间教室有 2 扇门,一共有 $2 \times N$ 扇门。每扇门都有编号,分别为自 $1$ 到 $2 \times N$。 开始时,所有门均为关闭状态。现在按照以下规则对门进行处理: - 第一次,将所有门打开(即所有编号为 1 的倍数的门状态反转)。 - 第二次,将所有编号为 2 的倍数的门作相反的处理(原来是打开的就关闭,原来是关闭的就打开)。 - 第三次,将所有编号为 3 的倍数的门作相反的处理。 - …… - 第 $N$ 次,将所有编号为 $N$ 的倍数的门作相反的处理。 问第 $N$ 次处理后,有多少扇门为打开状态?
输入格式
一行,输入一个正整数 $N$ ($2 \le N \le 100$),代表教室的数量。
输出格式
输出一个整数,表示经过 $N$ 次处理后,处于打开状态的门的总数。
样例 1
输入 (Input)
2
输出 (Output)
2
样例说明
$N=2$,共有 4 扇门,初始均为关闭。 - 第一次操作后,所有门打开:`1(开), 2(开), 3(开), 4(开)`。 - 第二次操作后,反转 2 的倍数门(2 号和 4 号):`1(开), 2(关), 3(开), 4(关)`。 - 操作在第 $N=2$ 次结束,最终打开的门有 1 号和 3 号,共 2 扇。
- $2 \le N \le 100$。 - **算法提示**: 由于 $N \le 100$ 数据范围非常小,可以直接使用一个大小为 $2 \times N + 1$ 的布尔数组进行状态模拟: 1. 用 `false` 表示关闭,`true` 表示打开。 2. 外层循环 $i$ 从 1 到 $N$,代表第 $i$ 次操作。 3. 内层循环 $j$ 从 $i$ 开始,每次递增 $i$,将所有满足 $j \le 2N$ 的门的状态取反(`doors[j] = !doors[j]`)。 4. 最后统计数组中为 `true` 的元素个数。
自测终端 stdin → stdout
输入 stdin
CtrlShiftEnter
输出 stdout

                
错误 stderr

                
CtrlEnter提交
自动保存已开启
操作成功
wzs_oj@kernel:~ — wzs-sh
guest@wzsoj:~$
刷新页面 F5
复制 Ctrl+C
粘贴 Ctrl+V
搜索题目
站点公告
今日神谕
CSP 倒计时
排行榜
我的提交
Esc 关闭 Enter 跳转 支持模糊匹配数字