QOJ.ac

QOJ

Total points: 100 Output Only

#10355. 公园重建

الإحصائيات

Note: Currently the partial scoring for this problem is not working.

怪物城有一个大型公园,该公园由若干个景点以及连接这些景点所在地点的单向道路组成,共有 $v$ 个景点,编号为 $1,2,\cdots,v$,这些景点包含了 $n$ 个入口和 $1$ 个出口,编号 $1,2,\cdots,n$ 的景点为入口,编号为 $v$ 的景点为出口。公园内一共有 $e$ 条道路,第 $i$ 条道路的起点为景点 $a_i$,终点为景点 $b_i$。

每个景点 $i$ 都有一个标志 $s_i$,这个标志是 &| 两者之一。类似地,每条道路 $i$ 也有一个标志 $t_i$,这个标志是 &|~<> 五者之一。如果 $t_i$ 不等于 ~,那么道路 $i$ 还有一个权值 $l_i$。

每天,有 $n$ 只怪物组成一波进入公园。第 $i$ 天,初始生命值分别为 $h_{i,1},h_{i,2},\cdots,h_{i,n}$ 的 $n$ 只怪物在同一时刻分别进入 $n$ 个入口 $1,2,\cdots,n$,然后这些怪物将在公园内闯荡。在每一分钟内,每只怪物将会分身成 $k$ 个生命值和分身前相同的怪物($k$ 为以该怪物所在景点为起点的道路数),分别朝着 $k$ 条以该怪物所在景点为起点的道路前进。

一只怪物通过一条道路恰好需要 $1$ 分钟。生命值为 $h$ 的怪物通过道路 $i$ 之后生命值将变化为 $h'$,下表给出了变化关系。

$t_i=$ $h'=$ 说明
& $h\ \mathrm{AND}\ l_i$ 将 $h$ 和 $l_i$ 在二进制下做按位与运算的结果
| $h\ \mathrm{OR}\ l_i$ 将 $h$ 和 $l_i$ 在二进制下做按位或运算的结果
~ $\mathrm{NOT}\ h$ 将 $h$ 在二进制下按位 $0,1$ 取反的结果
< $h\ \mathrm{SHL}\ l_i$ 将 $h$ 在二进制下低位补 $l_i$ 个 $0$,舍弃最高 $l_i$ 位的结果
> $h\ \mathrm{SHR}\ l_i$ 将 $h$ 在二进制下高位补 $l_i$ 个 $0$,舍弃最低 $l_i$ 位的结果

表格中 $\mathrm{AND},\mathrm{OR},\mathrm{NOT},\mathrm{SHL},\mathrm{SHR}$ 分别对应了按位与、按位或、按位取反、按位左移、按位右移五种位运算。其中 $h,l_i$ 和 $h'$ 都是 $32$ 位无符号整数。对于 $\mathrm{AND},\mathrm{OR}$ 运算,满足 $0\le l_i < 2^{32}$。对于 $\mathrm{SHL},\mathrm{SHR}$ 运算,满足 $0\le l_i < 32$。

当生命值为 $h_1,h_2,\cdots,h_c$ 的多只怪物在同一景点 $i$ 相遇时,它们会合体成一只怪物,其生命值 $h'$ 等于 $h_1,h_2,\cdots,h_c$ 做 $s_i$ 运算的结果,即:若 $s_i$ 为 &,则合体后的怪物生命值 $h'=h_1\ \mathrm{AND}\ h_2\ \mathrm{AND}\ \cdots\ \mathrm{AND}\ h_c$;若 $s_i$ 为 |,则合体后的怪物生命值 $h'=h_1\ \mathrm{OR}\ h_2\ \mathrm{OR}\ \cdots\ \mathrm{OR}\ h_c$。之后,如果该怪物位于公园的出口,那么它就会离开公园。每一波怪物中,第一只离开公园的怪物被称为 Winner。所有怪物初始生命值和 Winner 离开公园时的生命值都会被记录下来。

一只怪物死亡当且仅当以下几种情况之一(死亡后的怪物永远不会行动或参与合体):

1、没有一条道路以该怪物所在景点为起点,且该怪物不在出口。

2、该怪物的生命值为 $0$。这意味着怪物可能在道路上死亡或者在合体后瞬间死亡。

3、从所有怪物进入公园到当前时刻超过了 $k$ 分钟,其中 $k$ 为怪物的寿命。

你可以认为第 $i+1$ 天时,在第 $i$ 天进入的怪物均离开公园或死亡。

然而,$m$ 天之后,一场天灾将这个公园严重破坏了。不过,怪物城希望根据这 $m$ 天的记录重建这个公园,但这件事有些困难,于是他找到了你来帮忙——当然,只要你设计出任意一种能满足 $m$ 天的所有记录的方案就行了。

输入格式

所有输入数据 rebuild1.in ~ rebuild10.in 见数据下载。

输入第 $1$ 行包含 $3$ 个整数 $n,m,k$,分别表示每天进入的怪物个数、天数以及怪物的寿命。

第 $2$ 行至第 $2m+1$ 行为 $m$ 天的记录。其中,第 $2i$ 行包含 $n$ 个整数 $h_{i,1},h_{i,2},\cdots,h_{i,n}$,表示第 $i$ 天的 $n$ 只怪物进入公园时的初始生命值,第 $2i+1$ 行包含 $1$ 个整数 $w_i$,表示第 $i$ 天怪物的 Winner 离开公园时的生命值。数据保证每天均存在 Winner

输出格式

针对给定的 $10$ 个输入文件 rebuild1.in ~ rebuild10.in,你需要分别提交你的输出文件 rebuild1.out ~ rebuild10.out。

输出第 $1$ 行包含 $2$ 个整数 $v,e$,分别表示景点数和道路数,$n < v\le 100$,$0\le e\le 500$。

第 $2$ 行包含 $1$ 个长度为 $v$ 的字符串 $s$,其中第 $i$ 个字符 $s_i$ 为 &| 之一,表示第 $i$ 个景点的标志。

第 $3$ 行至第 $e+2$ 行,每行描述一条道路。其中,第 $i+2$ 行四个数或字符 $a_i,b_i,t_i,l_i$,分别表示第 $i$ 条道路的起点、终点、标志和权值。$1\le a_i,b_i\le v$,标志为 &|~<> 之一,特别地,当 $t_i$ 为 ~ 时,$l_i$ 并不会输入。允许两景点间连有多条道路,也允许存在起点和终点相同的道路。

输出任意一种满足要求的方案即可。数据保证存在这样的方案。

样例输入

2 4 2
11 1
20
11 2
18
11 3
16
18 12
12


样例输出

4 4
||&&
1 3 | 0
2 3 ~
2 4 & 12
3 4 < 1


样例说明

样例输出为一种可能的公园重建方案。以第 $1$ 天的怪物为例:

一开始,有 $2$ 只怪物,分别位于景点 $1,2$,生命值分别为 $11,1$。

第 $1$ 分钟,景点 $1$ 的怪物沿道路进入景点 $3$,其生命值变为 $11\ \mathrm{OR}\ 0=11$;景点 $2$ 的怪物分身成 $2$ 只怪物,一只沿道路进入景点 $3$,其生命值变为 $\mathrm{NOT}\ 1=4294967294$,另一只沿道路进入景点 $4$,其生命值变为 $1\ \mathrm{AND}\ 12=0$,因此该分身在进入景点前死亡。之后,位于景点 $3$ 的 $2$ 只怪物合体成 $1$ 只生命值为 $11\ \mathrm{AND}\ 4294967294=10$ 的怪物。此时仅景点 $3$ 有 $1$ 只怪物。

第 $2$ 分钟,景点 $3$ 的怪物沿道路进入景点 $4$,其生命值变为 $10\ \mathrm{SHL}\ 1=20$。景点 $4$ 为出口,所以接下来该怪物将离开公园,成为 Winner。

因此,该组怪物的 Winner 生命值为 $20$。

子任务及部分分

我们提供了 $10$ 个评分文件 rebuild1.ans ~ rebuild10.ans。每个评分文件共 $10$ 行,第 $i$ 行一个评分参数 $a_i$,具体意义将在下面给出。

每个测试点单独评分。对于每个测试点,如果选手的输出格式不合法,则得 $0$ 分。如果输出合法,但 $m$ 条记录中只有部分记录被满足,则你还可能获得部分分。

在你的方案中,若满足的记录条数为 $x_{user}$,你的分数将会由下表给出:

得分 条件 得分 条件
$10$ $x_{user}\ge a_{10}$ $5$ $x_{user}\le a_5$
$9$ $x_{user}\ge a_9$ $4$ $x_{user}\ge a_4$
$8$ $x_{user}\ge a_8$ $3$ $x_{user}\ge a_3$
$7$ $x_{user}\ge a_7$ $2$ $x_{user}\ge a_2$
$6$ $x_{user}\ge a_6$ $1$ $x_{user}\ge a_1$

若不符合表中所有条件,得 $0$ 分;若符合表中的多个条件,则取分数最高的。

如何测试你的输出

在终端中先切换到该试题的目录下:(windows用户请使用cmd)(假设你把输入输出文件、checker 什么的都放在了 rebuild 这个文件夹下)

cd rebuild

我们提供checker这个工具来测试你的输出文件是否是可接受的。使用这个工具的方法是,在终端中运行

./checker_linux64 <case_no>

其中 case_no 是测试数据的编号。例如

./checker_linux64 3

将测试 rebuild3.out 是否可以接受。(windows用户请使用 checker_win32 3)(什么你是windows 64位?放心吧可以运行win32应用程序的。)

当然我们有对应的 linux 32 位版本:checker_linux32。如果 linux 用户发现无法运行程序,请尝试执行 chmod +x checker_linux64chmod +x checker_linux32 后重试。

在你调用这个程序后,checker 将根据你给出的输出文件给出测试的结果。

请不要随便更改in文件,防止checker出现不可预知的错误。

另外,你还可以在终端中使用命令

./checker_linux64 –w <case_no>

以将测试点 <case_no> 中每天怪物行进过程中的位置和生命值输出到文件 report.log 中。注意文件 report.log 可能很大,极端情况下文件大小约为 $150\texttt{MB}$。


أو قم برفع الملفات واحداً تلو الآخر:
About Issues

We understand that our problem archive is not perfect. If you find any issues with the problem, including the statement, scoring configuration, time/memory limits, test cases, etc.

You may use this form to submit an issue regarding the problem. A problem moderator will review your issue and proceed it properly.

STOP! Before you submit an issue, please READ the following guidelines:

  1. This is not a place to publish a discussion, editorial, or requests to debug your code. Your issue will only be visible by you and problem moderators. Other users will not be able to view or reply your issues.
  2. Do not submit duplicated issues. If you have already submitted one, please wait for an moderator to review it. Submitting multiple issues will not speed up the review process and might cause your account to be banned.
  3. Issues must be filed in English or Chinese only.
  4. Be sure your issue is related to this problem. If you need to submit an issue regarding another problem, contest, category, etc., you should submit it to the corresponding page.

Active Issues 0

No issues in this category.

Closed/Resolved Issues 0

No issues in this category.