fjwc2018题解

随便乱水qwq…
感觉海星
咕咕咕了一题

bzoj5244: 最大真因数

胡乱学了个min_25筛
注意到答案函数是不满足积性函数的所以不能直接筛
但是观察我们min_25筛的后面一部分的过程
可以发现,对于每个合数
我们用的是其最小的质因子来将其的贡献统入
又可以知道一个数的最大真因数是他除以他的最小质因子
所以先筛f(i)=if(i)=if(i)=i这个函数的前缀和
w(i,j+1)w(i,j+1)w(i,j+1)计算到w(i,j)w(i,j)w(i,j)时,先不进行转移
先枚举最小质因子次数来计算答案,其实就是用后面一个式子除一个prime[i]prime[i]prime[i]即可

bzoj5245: 欧拉函数

由于数据随机
打表可知值域在400004000040000以内的仅有420342034203个质数
所以对于第二个操作,我们可以用线段树套bitset维护区间内有多少个质因数出现过
最后直接按定义计算欧拉函数即可
由于数据随机
对于第一个操作,可知总值域不超过2e92e92e9
所以树状数组维护一下区间和,预处理2e9\sqrt 2e92e9内的质数,直接筛然后按定义计算欧拉函数即可
由于数据随机所以可以卡过…

bzoj5254: 红绿灯

可知如果一个人走到某个路口被红灯拦下了,那么后面这个人的行动路线是一样的
预处理一个f[i]f[i]f[i]表示在第iii个路口从绿灯第一秒出发,需要多少时间到终点
于是只需要知道在某个时间zzz,从某个路口出发会在哪个路口被拦下
dis[i]dis[i]dis[i]表示从起点到第iii个路口所需时间,mod=R+Gmod=R+Gmod=R+G
那么当且仅当dis[i]−dis[u]+z&lt;G(mod&ThinSpace;&ThinSpace;(R+G))dis[i]-dis[u]+z &lt; G (\mod (R+G))dis[i]dis[u]+z<G(mod(R+G))时,从路口uuu出发不会被路口iii拦下
先对前式所有数取模后可以知道只需要满足
dis[i]−((dis[u]−z+mod)%mod)&gt;Gdis[i]-((dis[u]-z+mod)\%mod) &gt;Gdis[i]((dis[u]z+mod)%mod)>G即会被拦下
根据括号内式子的大小关系讨论dis[i]dis[i]dis[i]的取值范围
过程用一个动态开点线段树维护即可

bzoj5255: 全排列

随意思考一下就可以知道,只要满足这两个区间[l1,r1][l1,r1][l1,r1][l2,r2][l2,r2][l2,r2]离散化后值是相同的
那么这两个区间就是相似的
所以只需要知道相对大小关系
预处理f[i][j]f[i][j]f[i][j]表示大小为iii的排列,含有jjj个逆序对的方案数
注意到逆序对最多只有n∗(n−1)2\frac{n*(n-1)}{2}2n(n1)个,那么预处理的复杂度是可以接受的
转移可以O(1)O(1)O(1)
最后统计答案的时候组合数一下就完事
感觉最水的一道啊qwq

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值