介绍

金枪鱼是。 AtCoder 的启发式评级是浅蓝是。
本文适用于想要在 AHC 中尝试大量测试用例的人。
如果您没有时间,只需阅读“要尝试多少个测试用例”和“(假设)问答”。

为什么要尝试很多测试用例?

在 AHC(AtCoder Heuristic Contest,一种为难以找到最佳解决方案的问题创建最佳解决方案的竞赛)中,答案是在许多测试用例中判断的。现在,在 AHC 中,为什么我们(那些偏执的人)要尝试大量的测试用例?
现在,我想向您展示 AHC 的两件事情。

有一个

我说:“好吧!我感觉我手头已经试了10个案例,而且我的分数似乎在上升,所以我会提交它。”
~ 提交 WJ 26/50 ~
我说:“不,我赢了。我要去洗澡了。”
〜沐浴后〜
我说:“啊?我的分数要降了!!”

有 2

我说,‘不,这就是发生的事情。
~ 提交 WJ 10/50 ~
我说:“好吧,我要去洗澡了。”
〜沐浴后〜
重新“Boku”

是的,对于有很多测试用例的 AHC,通常很难通过检查前 5 个或 10 个用例来知道总分和有效答案是否总能得到。
此外,AHC 的提交时间限制在短期内为 5 分钟,在长期内为 30 分钟。
在提交长期竞赛并获得RE或WA之后,我每天都会发生三分钟后发现一个错误并痛苦地晕倒的情况。

对此,如果手头可以多试几个测试用例,会更容易看出因答案码的变化、有无RE和WA等因素导致的分数的涨跌。

要尝试多少个测试用例

所需的执行环境

  • 锈(希望货能跑)
  • 红宝石
  • ShellScript
    (已在 Ubuntu 22.04 上确认运行)

AHC 通常有一个用 Rust 编写的可视化器/输入生成器的本地版本可供下载。用这个。
下载本地版本的可视化工具/输入生成器并将其展开以创建一个名为tools 的目录,因此我们将在该目录中工作。

tools 中创建您的答案代码。我主要使用 C++,所以我用名称 main.cpp 创建它。

tools/
 ├ in/
 ├ src/
 ├ target/
 └ main.cpp

我想现在的目录结构大概是这样的(tools里面的文件我还没有写完。比如README_ja.md这样的文件可能有,但是我暂时没有,所以我跳过它)。
接下来,在tools中创建help.rbrun.sh,内容如下。

帮助.rb
n = gets.split[-1].to_i
tmp = 0
File.open("res.txt", mode = "r+") do |f|
	s = f.read
	tmp += s.nil? ? 0 : s.to_i
	tmp += n
end
File.delete("res.txt")
File.open("res.txt", mode = "w") do |f|
	f.puts tmp
end
跑。嘘
cp /dev/null ./res.txt
g++ main.cpp -o main
for file in $(ls -1 ./in/*.txt); do
	./main < $file > out.txt
	cargo run --release --bin vis $file ./out.txt > ./out2.txt
	cat ./out2.txt | ruby help.rb
done
echo "Done! Score:"
cat res.txt

并在tools 内创建另一个文件res.txt
我觉得如果现在这样就好了。

tools/
 ├ in/
 ├ src/
 ├ target/
 ├ help.rb
 ├ run.sh
 └ main.cpp

在这种状态下,

$ cd ~/途中のディレクトリ/tools/
$ sh ./run.sh

然后测试用例执行将开始。

(假设)问答

我正在使用 Python,我该怎么办?

制作main.py 而不是main.cpp
run.sh的内容

跑。嘘
cp /dev/null ./res.txt
for file in $(ls -1 ./in/*.txt); do
	python3 ./main.py < $file > out.txt
	cargo run --release --bin vis $file ./out.txt > ./out2.txt
	cat ./out2.txt | ruby help.rb
done
echo "Done! Score:"
cat res.txt

请。

我没有动。

由于我是在 AHC013 期间写这篇文章,所以之后的 AHC 中本地版本可视化器和输入生成器的内容
可能不同。到时候请改写run.shhelp.rb好了。

它工作缓慢。

对不起…
它很慢,因为它同时使用了 ShellScript 和 Ruby。
如果你觉得“我可以写一个更快的执行脚本!”,请留言?

在最后

AHC 好玩~!


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308623152.html

相关文章: