【JZOJ5439】 Calculate

本文介绍了一种通过拆分复杂式子来简化计算的方法,特别适用于求解包含除法运算的问题。文中详细解释了如何利用取整运算的特性进行公式变形,并给出了具体的证明过程。

题目简述

n100000,m10000,k109n≤100000,m≤10000,k≤109

Bi109,Ai500Bi≤109,Ai≤500

思路

看到式子果断拆

有这样一个式子:abc=acbc(a%c<b%c)⌊a−bc⌋=⌊ac⌋−⌊bc⌋−(a%c<b%c)

那怎样证明呢?

a=k1c+d1(0d1<c),b=k2c+d2(0d2<c)a=k1c+d1(0≤d1<c),b=k2c+d2(0≤d2<c)

ab=k1c+d1k2cd2=(k1k2)c+d1d2a−b=k1c+d1−k2c−d2=(k1−k2)c+d1−d2

所以abc=c+d1d2c⌊a−bc⌋=c+⌊d1−d2c⌋

c<d1d2<c−c<d1−d2<c

d1d2c=(d1<d2)⌊d1−d2c⌋=−(d1<d2)

所以abc=acbc(a%c<b%c)⌊a−bc⌋=⌊ac⌋−⌊bc⌋−(a%c<b%c)

所以TBiAi=TAiBiAi(T%Ai<Bi%Ai)⌊T−BiAi⌋=⌊TAi⌋−⌊BiAi⌋−(T%Ai<Bi%Ai)

对于每个询问,二分TT

记录每个Ai的值的个数

对于每个AiAi记录Bi%AiBi%Ai的个数

分成三个部分分别求值即可

总结

  • 式子要拆
  • 求临界点要二分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值