T1:题解待更新
T2:首先p肯定全部分给流量最多的一条边,所以现在就是求流量最多的一条边的最小值。注意这个值可以是小数。
接下来我们先算出最大流,然后就可以二分答案,限制每一条边的流量不能超过mid,在做一遍最大流。若最大流没有发生改变则当前mid是合法的。这样就做完这题了。
T3:首先可以想到把x轴和y轴分开考虑。
因为每一个数各个位置的乘积最终一定只包含2、3、5、7这四个质因子,所以我们可以先把1~n中只包含2、3、5、7质因子的数都筛选出来,这样的数不多。
然后设num[i]表示各位乘积为i的数的个数,这个可以用数位dp求。设f[i][c2][c3][c5][c7][0/1]表示到第i位,2、3、5、7的指数分别为c2、c3、c5、c7,当前是否有顶到上限的方案数。转移显然。注意0和1的区别,具体做法就是在初始化的时候把所有长度的数字都考虑进去,然后在dp时强制下一位只能填1~9即可。
再求出了num之后,我们下一步就是要求num[i]*num[j]的前k大。这个可以用堆来实现。首先我们把num[1]*num[1]、num[1]*num[2]……num[1]*num[s]都加入堆中,堆中的每一个元素还要记录下num的两个下标(设为f1、f2)。加下来操作k次,每次取出堆顶,然后将num[f1]*num[f2+1]加入堆中。至于为什么这样是对的,我们可以理解成我们固定了每一个num[f1],然后要在所有num[f1]*num[f2]中选出最大值来。至此这题就做完了。