2019ICPC上海网络赛 C. Triple(NTT+容斥)

题意:

给你三个包含n个元素的数组a,b,c,求有多少个三元 < a i , b j , c k > <a_i,b_j,c_k> <ai,bj,ck>满足:
∣ a i − b j ∣ < = c k , ∣ a i − c k ∣ < = b j , ∣ b j − c k ∣ < = a i |a_i-b_j|<=c_k,|a_i-c_k|<=b_j,|b_j-c_k|<=a_i aibj<=ck,aick<=bj,bjck<=ai(也就是组成一个允许最长边等于另外两边和的三角形)

题解:

这题的思路和hdu4609差不多,都是先做卷积得到两边和的组成,再枚举最大边去容斥。我们可以枚举最大边在哪个数组,枚举它的长度,利用另外两边和的数组得到所有大于等于当前枚举的边的两边和,但是由于这其中包含了大于等于它的边,所以要减去 两个大于它的边构成的两边和一条边大于它另一条边小于它的两边和。然后答案再加上最大两条边相等,另一条边较小的答案 和 三条边相等的答案。
可以用NTT实现快速卷积,由于有多达100组数据,而n较小的时候用NTT会很慢(因为NTT复杂度是 O ( m a x ( a , b , c ) l o g ( m a x ( a , b , c ) ) ) O(max(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值