P4920 未来程序
upd:管理员不负责任!我这格式都挂了怎么还能过的(
由于 \(\tt{F}\color{red}\tt{orever\_Pursuit}\) 一直想让我写这题于是我就写了。
备注:#9 和 #10 有参照题解。
每个子任务难度评价对照如下:
- EZ:大众分,应该非常简单。
- NM:差不多是大众分,比较简单。
- HD:较难,可能比较难做。
- SP:愚人节题目,不考察选手OI实力。
Program 1(EZ)
龟速乘,直接用 __int128
就搞定了。
Program 2(NM)
一个奇怪的循环,列出前几项可以发现一个规律。
在 \(n\) 次循环后,\(A=F(n)^2,B=F(n-1)F(n),C=F(n-1)^2\),
其中 \(F(n)\) 代表斐波那契数列,直接矩阵快速幂一波带走。
Program 3(EZ)
小学奥数题。
但是这里要注意分母的常数请直接放到分子的其中一个因数里,不然溢出后除的结果是不对的。
\(\uparrow\) 为什么不用 __int128
呢?因为 __int128
也爆炸了!
Program 9(SP)
\(\text{Q1}\):\(1984\),不会的请重温笔试/初赛。
\(\text{Q2}\):\(123456\),没什么好说的。
\(\text{Q3}\):\(\tt{chenlijie}\),摘掉眼镜或者看 vs code 的预览那边。
\(\text{Q4}\):暴力枚举所有符号即可。
\(\text{Q5}\) 到 \(\text{Q8}\):注意到 Program \(2\) 中有一份英语词典,我们可以一个一个代入尝试。
\(\text{Q9}\):注意到字符串长度不超过 \(7\),所以依旧选择暴力选择字典的两个单词去尝试,这里需要先筛掉长度超过 \(5\) 的字符,然后就跑的飞快了。
\(\text{Q10}\):注意到 Program \(10\) 中已经有这个句子了,我们可以在一个函数中直接得到答案。你也可以直接百度。
Program 7(HD)
观察样例发现是完成 \(16\times16\) 的数独,由于我是贺题怪所以我随便贺了一份代码,跑出来了,很快啊!
正解是舞蹈链,你可以在 SPOJ 的那个数独题里找到这个题的题解。
Program 10(SP)
一开始的思路是直接转化函数,化递归为递推。
然后我把单个字母的函数推了一遍,其余保留原样,结果编译异常慢。
然后本来只跑一个数据点的,结果答案就全出来了,很快啊!
后来发现 \(\text{O(fast)}\) 直接帮你推完了,不讲武德!
Program 4(NM)
- Task \(1\):两个都是 \(1\) 且不相同的格子,对答案贡献为 \(1\),求答案。
- Solution:设为 \(1\) 的格子数量为 \(x\),答案就是 \(x(x-1)\)。
- Task \(2\):一个为 \(1\) 的格子对答案贡献为所有 \(0\) 和它的曼哈顿距离最小值,求答案。
- Solution:显然这个格子一定在左上,右上,左下,右下四个方向里,可以直接 dp。
Program 5(NM)
统计全为 \(1\) 的子矩形数量。
这个也是经典题目,统计以每一行为最后一行的和法矩形数量,使用单调栈计算答案即可。
Program 6(NM)
学过 pollard-rho 的同学都知道这个东西最后会进入一个环,并且期望进入这个环的时间并不长。
众所周知判环可以用 floyd 或者 brent,brent 快一点,floyd 慢一点,取决于你想用哪个。本机成功使用 floyd 判圈算法在 \(1\) 分钟左右的时间内得出答案.
Program 8(HD)
我们大胆猜测答案是几个组合形式的数,那么答案一定是一个关于 \(n\) 的多项式,于是大力插值。
注意 \(10^{15}\) 要对模数取模,不然插值的时候会爆 long long
。