题号:NC214190
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
“奇偶校验是一种简单且应用极为广泛的检错方法、由奇偶校编码规则生成的数据校验码称为奇偶校验码,它是一种检错码。奇偶校验分为奇校验和偶校验两种,奇(偶)校验码的编码规则是使数据中1的个数为奇(偶)数。由于数据校验码中的有效编码(被检验的部分),可能是奇性(1的个数为奇数),也可能是偶性(1的个数为偶数),所以奇偶校验码都仅需要在数据有效编码的基础上增加一位奇偶校验位,就可以使数据校验码满足指定的奇偶性要求。”
“奇偶校验码的具体生成方法为:偶校验时,若有效编码中1的个数为偶数,则检验位为0;若有效编码中1的个数为奇数,则检验位为1。奇校验时,若有效编码中1的个数为偶数,则校验位为1;若有效编码中1的个数为奇数,则检验位为0。”
奇偶校验码的格式:[若干位有效编码][一位奇偶校验码]
现在需要你来模拟发送方(sender)和接收方(receiver),分别对待发送的有效数据和接收到的奇偶校验码进行处理:
作为发送方,你需要根据要求,将有效数据生成对应的校验码;
作为接收方,你需要根据收到的校验码,判断接收到的信息是否出现了错误,并对应给出否定答复(NAK)与肯定答复(ACK)。
输入描述:
多组输入
每组输入第一行输入一个字符串("sender"或"receiver"),表明当前模拟的是发送方或是接收方,
第二行输入一个字符串("odd"或"even"),表明当前使用奇校验或是偶校验,
第三行输入一个整数l以及一个01字符串s;整数l代表字符串的长度,字符串s对应代表未被编码成奇偶校验码的有效数据或是未验证是否正确的奇偶检验码。
(2 <= l <= 100000)
输出描述:
对于属于发送方的输入,在一行内输出对应生成的奇偶校验码;
对于输入接收方的输入,判断输入的奇偶校验码是否发生错误,在一行内对应输出"NAK"或"ACK"(不包括引号)。
示例1
输入
复制
sender
odd
8 01010101
receiver
even
9 010101010