QOJ.ac

QOJ

Limite de temps : 2 s Limite de mémoire : 1024 MB Points totaux : 100 Communication

#503. 基于鸟类载体的IP协议

Statistiques

当你居住在芬兰的森林里,远离所有城市时,互联网连接的质量会发生剧烈波动。这在进行程序设计竞赛时有明显的劣势,尤其是大多数比赛都在线进行的情况下。

为了提高互联网连接的可靠性,互联网工程任务组(IETF)于 1990 年 4 月 1 日发布了一项名为“IP over Avian Carriers”(IP 承载于禽类载体)的标准。该标准描述了如何利用鸟类来传输互联网流量。鸟类不会受到诸如电缆切断或停电等问题的影响,因此可以作为标准互联网连接的有效备用方案。不幸的是,鸟类也会遇到其他问题。当发送多只携带数据的鸟时,它们不会按顺序送达数据,有时鸟儿甚至会在途中丢失。

你的任务是实现两个程序,为这种鸟类传输协议增加一些冗余——一个编码器和一个解码器。编码器将获得一个由 $C \cdot N$ 个比特(即数字 0 或 1)组成的字符串 $X$,其中 $N > 1$。它应该生成一个包含 $K$ 个元素的向量 $S[0], S[1], \dots, S[K - 1]$,其中每个 $S[i]$ 都是一个长度为 $N$ 的比特字符串。

之后,你的解码器将获得该向量中 $C$ 个元素的子集。它随后应该输出原始比特字符串 $X$。

编码器

你的编码器应实现函数 vector<string> encode(int C, int K, int N, string X)。它将从任务描述中获得整数 $C, K$ 和 $N$,以及比特字符串 $X$。$X$ 的长度为 $C \cdot N$,且仅由字符 0 和 1 组成。

编码器应输出一个包含 $K$ 个字符串的向量。每个字符串的长度应为 $N$,且仅包含字符 0 和 1。

解码器

解码器应实现函数 string decode(int C, int K, int N, vector<string> Y, vector<int> I)。它将从任务描述中获得整数 $C, K$ 和 $N$,以及由 encode(C, K, N, X) 输出的字符串 $S$ 的一个子集 $Y$。$Y$ 和 $I$ 的长度均为 $C$。$I$ 将包含从编码器中取出的字符串的从零开始的索引,使得 $Y[i]$ 是第 $I[i]$ 个字符串(即 $Y[i] = S[I[i]]$)。

解码器应输出长度恰好为 $C \cdot N$ 的原始字符串 $X$。

实现细节

你可以使用 C++、Java、Python 或 C# 实现你的解决方案。你可以从此处下载需要实现的模板。注意,你只能提交 avian.cppavian.javaavian.pyavian.cs 文件中的一个。

说明:在此任务中,你不应使用标准输入或标准输出(即读取或写入终端)。这样做很可能会导致令人困惑的错误。

此外,程序在运行解码器之前会重新启动。因此,你使用的任何全局状态都将被清除。

子任务

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

子任务 分数 数据范围
1 30 $C = 3, K = 4, 1 < N \le 1000$
2 25 $C = 2, K = 4, 1 < N \le 1000, N \equiv 0 \pmod 2$ 即 $N$ 为偶数
3 20 $C = 2, K = 4, 1 < N \le 1000$
4 25 $C = 3, K = 5, 1 < N \le 1000$

输入格式

随附的样例评测程序按以下格式读取输入:

  • 第 1 行:$C \ K \ N$
  • 第 2 行:$X$
  • 第 3 行:$I[0] \ I[1] \dots \ I[C - 1]$

输出格式

样例评测程序将输出 decode 函数的返回值。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.