題目要求對 \(998244353\) 進行去模,所以二分之類的實數做法是不可行的。
條件等價於對於每一個學科 \(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)\)。
兩個做法都出來了,最後只需要進行根號分治即可。
程式碼咕咕咕。