Milmon 的網誌

網誌

THUSC 2018 Day 1 C. 人工智障 题解

2025-05-06 19:39:34 By Milmon

可以通过输入一些东西观察输出的错误信息得到输入格式。

测试点 1

首先可以得到输入的是一列数,并且容易发现输出的数即为输入的数的乘积。对答案分解质因数,但是数的数量和大小有限制,所以需要合并一下小的数。

测试点 2

首先可以得到要输入一个多项式和 $n$ 个区间,观察发现输出的数即为定积分值。

不过我做的时候没发现这一点,所以我枚举了次数和系数,然后 system 调用这个程序。

测试点 3

首先可以得到要输入的是一个实数坐标,容易猜到每个传感器对应一个坐标,程序返回传感器到输入的坐标的距离。这样可以得到 $4$ 分,但是无法通过第三个传感器。

可能的做法是不断随机一个抖动值,如果距离变近就更新当前坐标,并且不断缩小抖动范围。每次可以使用 system 调用下发的程序。

事实上第三个传感器将会在一条直线上移动和输入的坐标到原点的距离相等的距离。

测试点 4

观察发现要输入一个 01 矩阵,程序将会输出它的行列式。使用如下的矩阵:

0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0

这样的 $n \times n$ 的矩阵的行列式等于 $1 - n$,对答案分解质因数并构造分块矩阵即可。

测试点 5

根据答案文件的提示词可知要构造一张图,使得 $1$ 到 $i$ 的最短路数量为给定值。观察 $4$ 分的答案文件,容易构造出下图:

1 2
1 3
1 4
1 5
1 7
1 8
2 6
3 6
4 6
5 6
2 9
3 9
4 9
5 9
6 9

于是不妨所有最短路数量相等的点都连成一个菊花状,然后对于每个最短路数量 $x$,只需要找到一个因数 $y$ 满足最短路数量 $y$ 至少出现了 $\frac{x}{y} + 1$ 次即可。

测试点 6

根据答案文件的提示词可知要构造一张图,使得 $1$ 到 $n$ 的长度为 $i$ 的路径的数量为给定值。观察 $10$ 分的答案文件,得知 $n = 97$,最短路长度为 $84$ 并且只有一条。所以先构造一条包含 $85$ 个结点的链,然后在上面添加 $12$ 个点作为枝叶。当枝叶特别远时得到的路径数量与距离无关,可以大幅减少可能的方案数,直接搜索即可。

测试点 7

根据答案文件的提示词可知要构造一张图,每条边都对应一步,每一步将在图上添加这条边,使得添加这条边之后额外连通的点对数量为给定值。而当这条边连接同一个连通块的点时,点对数量为 $0$,否则为两个连通块大小的乘积。即我们需要每次找到两个连通块大小的乘积为给定值,并将他们合并。

考虑倒过来,每次拆开一个连通块,使得拆开得到的两个连通块大小的乘积为给定值。预处理每一次拆分的给定值的所有因数,暴力搜索可以在 $0.3$ 秒内得到结果。

测试点 8

这是一种语言,支持四种运算并赋值、条件跳转、结束程序。

第一个子任务要求计算幂。由于次数不大,所以可以使用暴力计算也可以使用快速幂。

第二个子任务要求计算两个数的按位与。只需要每次去掉末尾的一个二进制位即可。

其中取余数运算可以通过 $A - \lfloor A / B \rfloor \times B$ 解决。

测试点 9

根据程序提示启动游戏。第一次询问选择 No 会得到 Bad Ending。所以要选择 Yes。接下来的问题需要依次答:

  • Is there any AI that has passed the Turing test? 选择 [1] Yes, I know one.
  • So in which do you use the idea of caching? 选择 [2] Segment Tree
  • So you know it. Who is the most powerful one in Go? 选择 [3] AlphaGo Zero
  • I have just recovered from an infinite loop. 选择 [1] So some infinite loops can be detected, right?
  • Of course I know... Tsinghua has its ___th anniversary recently. 根据搜索(现场应该有清华校徽?)可知清华大学创办于 $1911$ 年,比赛当年是 $2018$ 年,所以答案为 107,也可以通过二分得到
  • It seems that the disk is filled up. I need more space to save my memory. Can you buy a cloud disk for me? 选择 [1] Yes, it is a good idea.
  • The maxflow of a directed graph equals to its? 选择 [4] mincut
  • Which of the following problem is not NPC? 选择 [1] Euler Path
  • Which one of the three is supposed to be the most powerful? 选择 [3] Turing Machine

这样可以得到 Good Ending,最后的提示词中提示你需要再购买额外空间时选择隐藏的选项,选择 3 即可得到 True Ending。

测试点 10

在测试点 8 的基础上添加了 toss 指令,作用为令一个变量有 $p$ 的概率为 $1$,$1 - p$ 的概率为 $0$。存储时每个变量用一个二元组的集合存储,表示每个值出现的概率。

第一个子任务要求随机 $A$ 次硬币取或。只需要每次随机后求和,在 $\geq 2$ 时减 $1$ 即可。

第二个子任务要求在 $p$ 不同的时候让一个变量分别有 $0.5$ 得到 $0, 1$。只需要不断随机两个变量直到两个变量不相同时,返回第一个变量即可(因为得到 $0, 1$ 和 $1, 0$ 的概率是相同的)。

評論

NobodyThere
测试点 4 另解:随机一个 23*23 的矩阵,大约半小时不到能跑出答案。
  • 2025-05-27 20:51:26
  • Reply

發表評論

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。

可以用/kel来使用表情 kel。