2020.07.20【省选B组】模拟

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]中选出最大值来。至此这题就做完了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值