PIO16 单组_spj判断YES与NO¶
入门通过率 84.11%python3样例通过牛客 AC
讲解章节:输入输出处理
一句话
奇数输出 YES,偶数输出 NO。
解题思路¶
这题考什么¶
输入形态:单组数据,一行一个整数。 考点是判奇偶,以及第一次接触 special judge 这种判定方式。
special judge(简称 spj,特殊评测)指的是:判定不再把选手输出与标准答案 逐字符对照,而是交给一个校验程序去判断这份输出是否满足题目要求。 本题的 spj 体现在大小写上——yes、Yes、yEs 都算对 (见 solutions/_judge.json 里 PIO16 的 mode 为 spj)。 这与 PIO14 的严格比对(exact)正好相反:那里连末位补零都不能少。
但 spj 不等于「随便输出什么都行」。校验程序只放宽题目明确说明的那一维, 这里放宽的是大小写,其余仍要照规矩来:不能多输出空格、 不能加解释性文字、不能把 YES 写成 Y。
为什么用 n & 1¶
位运算 & 1 取出二进制最低位。整数的二进制最低位是 1 就是奇数,是 0 就是偶数, 所以 n & 1 与 n % 2 在本题完全等价,而 & 是单条机器指令,略快一点。 值得说清的是 C 系语言和 Python 在负数上的区别: C/C++ 里 -3 % 2 等于 -1,作为条件判断时容易写出 bug,所以 C 选手养成了用 & 1 的习惯; Python 的取模结果与除数同号,-3 % 2 等于 1,-3 & 1 也等于 1,两者一致。 本题 n >= 1,无论用哪种都不会出问题。
数据规模与复杂度¶
1 <= n <= 1e9,只有一个数。时间和空间都是 O(1)。 数据量这么小,input() 与 print 完全够用,没有必要动用缓冲读写。
坑在哪¶
- 奇偶与 YES/NO 的对应别写反:奇数是 YES。这是本题最主要的失分点。
- spj 放宽的只有大小写。输出 "YES " 多一个尾随空格、 或者输出 "YES!" 之类的变体,校验程序一样不认。
- int(input()) 不能漏掉 int:字符串的 "3" 做位运算会抛 TypeError。
参考实现¶
| solutions/PIO16.py | |
|---|---|
[:octicons-arrow-left-16: PIO15](PIO15.md) [PIO17 :octicons-arrow-right-16:](PIO17.md)