题目要求对 \(998244353\) 进行取模,所以二分之类的实数做法是不可行的。

条件等价于对于每一个学科 \(k\),求解下式的最大值:

\[\max\limits_{i,j,l,a_{j,k}\lt a_{i,k},a_{j,l}\gt a_{i,l}}\frac{a_{j,l}-a_{i,l}}{a_{j,l}-a_{i,l}+a_{i,k}-a_{j,k}} \]


我们接下来介绍两个做法:

  • \(O(n^2m)\)

这个式子是 \(\frac{p}{p+q}\) 的形式,可以考虑枚举 \((i,j,k)\) 这是可以确定 \(q\) 的,接下来我们需要求解 \(p\) 的最大值,而 \(p\) 的最大值只和 \((i,j,l)\) 相关。所以我们枚举 \((i,j)\),处理使得 \(p\) 最大的 \(l\),然后对于每一个 \(k\) 进行对应限制即可,当然我们需要保存形如 \((p,q)\) 的一个限制,因为取了逆元后无法进行比较。

枚举 \(i,j\) 复杂度 \(O(n^2)\),处理对应的 \(l\) 极值和枚举 \(k\) 都是 \(O(m)\),时间复杂度 \(O(n^2m)\)

  • \(O(nm^2)\)

这个做法比较有意思。

考虑到原条件等价于,按照 \(a_{*,k}\) 进行排序和按照加权排序的排名(并列算相同)相同。

又由于我们在使得上式最大的情况下,一定是给 \(k\) 这个学科赋 \(X\),给另一个学科赋 \(1-X\),那么我们枚举 \(k,l\),将他们按照 \(a_{*,k}\) 进行排序。将 \(a_{*,k}\) 相等的看作一类,那么我们只需要保证相邻两类在按照上述赋值的情况下依旧保持偏序关系。同样用上一个做法的 \(p,q\) 进行阐述,此时 \(q\) 已经确定,我们只需要使得 \(p\) 最大即可,那么取出两个类中的极值即可。

枚举 \(k\),进行排序(不是关键复杂度),然后枚举 \(l\),之前的复杂度为 \(O(m^2)\),对于每个相邻的学生都进行比较,则时间复杂度 \(O(nm^2)\)


两个做法都出来了,最后只需要进行根号分治即可。

代码咕咕咕。