luogu#P11481. [NordicOI 2017] IP over Avian Carriers(通信题无法评测)

[NordicOI 2017] IP over Avian Carriers(通信题无法评测)

题目背景

译自 Nordic Olympiad in Informatics 2017 IP over Avian Carriers

本题为通信题,目前无法评测。

题目描述

如果你住在芬兰的树林深处,远离所有城市,互联网连接的质量可能会非常不稳定。这对参与在线的程序设计竞赛来说显然是不利的,尤其是大多数竞赛都在线上进行。

为了提高互联网连接的可靠性,互联网工程任务组于 1990 年 4 月 1 日发布了一个名为 "IP over Avian Carriers" 的标准。这个标准描述了如何使用鸟类来传递互联网流量。鸟类不会因为电缆断裂或停电等问题而中断连接,因此可以作为标准互联网连接的有效备用选项。然而,鸟类也有其他问题。当发送多只带有数据的鸟时,数据可能不会按顺序到达,并且某些鸟在途中可能丢失。

你的任务是实现两个程序,为这种鸟类传输协议添加一些冗余:一个编码器和一个解码器。编码器会接收一个由 CNC\cdot N 个比特组成的字符串 XX(即由 0\tt 01\tt 1 组成的数字,且 N>1N\gt 1),并生成一个 KK 个元素的向量 S0,S1,,SK1S_0,S_1,\dots,S_{K−1},其中每个 SiS_i 是一个长度为 NN 的字符串。

之后,解码器会接收从该向量中选取的 CC 个元素的子集。然后它应输出原始的比特串 XX

编码器

你的编码器需要实现函数 vector<string> encode(int C, int K, int N, string X)。它会接收任务描述中的整数 CCKKNN 和比特串 XX

XX 的长度为 CNC\cdot N,并且仅包含字符 0\tt{0}1\tt 1

编码器应输出一个包含 KK 个字符串的向量。每个字符串的长度应为 NN,并且仅包含字符 0\tt 01\tt 1

解码器

解码器需要实现函数 string decode(int C, int K, int N, vector<string> Y, vector<int> I)。它会接收任务描述中的整数 CCKKNN,以及由编码器输出的字符串 SS 中选取的子集 YY

向量 YYII 的长度均为 CCII 包含编码器输出的字符串的零基索引,使得 YiY_iSIiS_{I_i} 的值(即 Yi=SIiY_i=S_{I_i})。

解码器应输出长度为 CNC\cdot N 的原始比特串 XX

实现

你可以使用 C++、Java、Python 或 C# 实现你的解决方案。所需实现的模板可以从提供的链接中下载。注意,你只需提交以下文件之一:avian.cpp、avian.java、avian.py 或 avian.cs。

注意:

  • 在此任务中,你不应使用标准输入或标准输出(即通过终端读取或写入)。否则可能会导致混乱的错误。
  • 此外,在运行解码器之前,程序会被重启。因此,任何全局状态都会被清除。

输入格式

包含的示例评测程序会读取以下格式的输入:

11 行:C,K,NC,K,N

22 行:XX

33 行:I0,I1,,IC1I_0,I_1,\dots,I_{C-1}

输出格式

示例评测程序会输出 decode 函数的返回值。

提示

你的解决方案将在一组子任务上进行评分。每个子任务包含多个测试用例。要获得子任务的分数,你的解决方案必须通过子任务中的所有测试用例。

子任务 分数 限制条件
11 3030 C=3C=3K=4K=41<N10001\lt N\leq 1000
22 2525 C=2C=2K=4K=41<N10001\lt N\leq 1000NN 为偶数
33 2020 C=2C=2K=4K=41<N10001\lt N\leq 1000
44 2525 C=3C=3K=5K=51<N10001\lt N\leq 1000