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

题目背景

译自 Nordic Olympiad in Informatics 2017 [IP over Avian Carriers](https://noi17.kattis.com/contests/vfoqp8/problems/avian)。 本题为通信题,目前无法评测。

题目描述

如果你住在芬兰的树林深处,远离所有城市,互联网连接的质量可能会非常不稳定。这对参与在线的程序设计竞赛来说显然是不利的,尤其是大多数竞赛都在线上进行。 为了提高互联网连接的可靠性,互联网工程任务组于 1990 年 4 月 1 日发布了一个名为 "IP over Avian Carriers" 的标准。这个标准描述了如何使用鸟类来传递互联网流量。鸟类不会因为电缆断裂或停电等问题而中断连接,因此可以作为标准互联网连接的有效备用选项。然而,鸟类也有其他问题。当发送多只带有数据的鸟时,数据可能不会按顺序到达,并且某些鸟在途中可能丢失。 你的任务是实现两个程序,为这种鸟类传输协议添加一些冗余:一个编码器和一个解码器。编码器会接收一个由 $C\cdot N$ 个比特组成的字符串 $X$(即由 $\tt 0$ 和 $\tt 1$ 组成的数字,且 $N\gt 1$),并生成一个 $K$ 个元素的向量 $S_0,S_1,\dots,S_{K−1}$,其中每个 $S_i$ 是一个长度为 $N$ 的字符串。 之后,解码器会接收从该向量中选取的 $C$ 个元素的子集。然后它应输出原始的比特串 $X$。 # 编码器 你的编码器需要实现函数 `vector encode(int C, int K, int N, string X)`。它会接收任务描述中的整数 $C$、$K$、$N$ 和比特串 $X$。 $X$ 的长度为 $C\cdot N$,并且仅包含字符 $\tt{0}$ 和 $\tt 1$。 编码器应输出一个包含 $K$ 个字符串的向量。每个字符串的长度应为 $N$,并且仅包含字符 $\tt 0$ 和 $\tt 1$。 # 解码器 解码器需要实现函数 `string decode(int C, int K, int N, vector Y, vector I)`。它会接收任务描述中的整数 $C$、$K$、$N$,以及由编码器输出的字符串 $S$ 中选取的子集 $Y$。 向量 $Y$ 和 $I$ 的长度均为 $C$。$I$ 包含编码器输出的字符串的零基索引,使得 $Y_i$ 是 $S_{I_i}$ 的值(即 $Y_i=S_{I_i}$)。 解码器应输出长度为 $C\cdot N$ 的原始比特串 $X$。 # 实现 你可以使用 C++、Java、Python 或 C# 实现你的解决方案。所需实现的模板可以从提供的链接中下载。注意,你只需提交以下文件之一:avian.cpp、avian.java、avian.py 或 avian.cs。 注意: - 在此任务中,你不应使用标准输入或标准输出(即通过终端读取或写入)。否则可能会导致混乱的错误。 - 此外,在运行解码器之前,程序会被重启。因此,任何全局状态都会被清除。

输入格式

包含的示例评测程序会读取以下格式的输入: 第 $1$ 行:$C,K,N$ 第 $2$ 行:$X$ 第 $3$ 行:$I_0,I_1,\dots,I_{C-1}$

输出格式

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

说明/提示

你的解决方案将在一组子任务上进行评分。每个子任务包含多个测试用例。要获得子任务的分数,你的解决方案必须通过子任务中的所有测试用例。 | 子任务 | 分数 | 限制条件 | | ------ | ---- | ------------------------------------------- | | $1$ | $30$ | $C=3$,$K=4$,$1\lt N\leq 1000$ | | $2$ | $25$ | $C=2$,$K=4$,$1\lt N\leq 1000$,$N$ 为偶数 | | $3$ | $20$ | $C=2$,$K=4$,$1\lt N\leq 1000$ | | $4$ | $25$ | $C=3$,$K=5$,$1\lt N\leq 1000$ |