QOJ.ac

QOJ

Limite de temps : 10 s Limite de mémoire : 256 MB Points totaux : 100 Interactif

#12646. 语言

Statistiques

你需要编写一个交互式程序,给定一系列维基百科摘录(见下文示例),依次猜测每段摘录的语言。在每次猜测后,你的程序会获得正确答案,以便它能在后续的运行中学习并做出更好的猜测。

每种语言由一个 $0$ 到 $55$ 之间的数字 $L$ 表示。每段摘录恰好包含 $100$ 个符号,表示为一个由 $100$ 个 $1$ 到 $65\,535$ 之间的整数组成的数组 $E$。这些 $1$ 到 $65\,535$ 之间的整数是任意分配的,并不对应任何标准编码。

你需要实现过程 excerpt(E),其中 $E$ 是一个包含 $100$ 个数字的数组,代表上述的维基百科摘录。你的实现必须调用一次 language(L),其中 $L$ 是你对该摘录所属维基百科语言版本的猜测。评测服务器实现了 language(L),它会对你的猜测进行评分并返回正确的语言。也就是说,如果 language(L) = L,则猜测正确。

评测服务器会调用 excerpt(E) $10\,000$ 次,即输入文件中的每一段摘录调用一次。你实现的准确率是 excerpt(E) 猜对语言的摘录所占的比例。

你可以使用任何你希望的方法来解决这个问题。Rocchio 方法是一种可以达到约 $0.4$ 准确率的方法。Rocchio 方法计算 $E$ 与目前为止所见过的每种语言 $L$ 的相似度,并选择最相似的语言。相似度定义为 $E$ 中出现在该语言 $L$ 的先前摘录中的不同符号的总数。

注意,输入数据下载自真实的维基百科文章,其中可能包含少量格式错误的字符或文本片段。这是预料之中的,也是任务的一部分。

样例

仅作说明,我们展示了来自 $56$ 种特定语言维基百科的摘录的文本表示:

  1. Yshokkie word meestal in Kanada , die noorde van die VSA en in Europa gespeel. Dit is bekend as 'n b
  2. وهو المنتج الذي يجعل المنظم ال يكسب ربحا وال يخسر ويحصل على ، Producer Marginal المنتج الحدي دخل يكف

样例输入文件 grader.in.1 包含 $10\,000$ 个这样的示例。这 $56$ 种语言是 IOI 2010 注册数据中列为“母语”的语言。每段摘录的语言是从这 $56$ 种语言中随机选择的,每段摘录取自相应维基百科版本中随机选择的一篇文章的第一段。文件的每一行包含:

  • 维基百科语言版本的两个字母 ISO 代码;
  • $100$ 个 $1$ 到 $65\,535$ 之间的数字,按顺序表示文章第一段的前 $100$ 个符号;
  • 这 $100$ 个符号的可视化表示(UTF-8 编码),你可以在文本编辑器或 Firefox 浏览器中阅读。此可视化表示仅供你参考,不打算作为你程序的输入。

官方评测器使用 $10\,000$ 个不同的摘录,以相同的方式从相同的 $56$ 个维基百科版本中选择。但是,评测器会为每种语言分配一个 $0$ 到 $55$ 之间的不同数字,并为每个符号分配一个 $1$ 到 $65\,535$ 之间的不同数字。

子任务

子任务 1 [30 分]

你的提交在评测服务器上必须达到 $0.3$ 或更高的准确率。

子任务 2 [最高 80 分]

你的得分将为 $114(\alpha-0.3)$,四舍五入到最接近的整数,其中 $\alpha$ 是你提交的准确率。

实现细节

  • 实现文件夹:/home/ioi2010-contestant/language/
  • 选手需要实现:lang.clang.cpplang.pas
  • 选手接口:lang.hlang.pas
  • 评测器接口:grader.hgraderlib.pas
  • 样例评测器:grader.cgrader.cppgrader.pas 以及 graderlib.pas
  • 样例评测器输入:grader.in.1
    • 注意:输入文件的每一行包含:两个字符的语言代码;由空格分隔的 $100$ 个数字表示的摘录;摘录的文本表示。
  • 样例评测器输入的预期输出:如果实现针对 $10\,000$ 个示例中的每一个都按规定调用了 language,样例评测器将输出 OK alpha,其中 alpha 是准确率。
  • 编译并运行(命令行):runc grader.crunc grader.cpprunc grader.pas
  • 编译并运行(gedit 插件):编辑任何实现文件时按 Control-R
  • 提交(命令行):submit grader.csubmit grader.cppsubmit grader.pas
  • 提交(gedit 插件):编辑任何实现或评测文件时按 Control-J

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.