ABC353

A题

题意是找到一个数组中,右侧第一个比a[1]大的位置,很简单

B题

给定一个数组A[i]和数字ans,如果把ans看作背包容量,问您几个背包可以把所有的数组放进去?这和背包问题不相同的是,数组里的内容必须挨着放,所以这个题非常简单,贪心就行,能放得下就放,放不下就不放

C题

给定数组A[i],对于下面的式子

i=1Nj=i+1N(a[i]+a[j])%100000000

n3105

a[i]108

这个题求的是模数的和,不是和的模,如果是和的模就比较好做,因为

(a+b)%c+(a+d)%c=(2a)%c+(b+d)%c

我们只需要将贡献拆开,用前缀和完成就可以了
但是这个题,我们求的是模数的和,不能用上面的式子,观察到a[i]的范围,两个数加起来共有两种可能,一种是不超过1e8,一种是超过1e8,超过1e8的话,模操作我们可以减去1e8,
同时,我们把这个式子拆开看,会发现他的意义就是Cn2,任选两个数加起来,所以每个数都被加过n-1次,然后我们再把所有加起来的和超过1e8的减去,所以我们先把答案加进去,然后再减掉1e8的对数就行,怎么寻找1e8的对数呢?

把数组排序,从小到大排序,利用双指针,对于a[1]来说,找到最大的右端点,使其和大于1e8,然后双指针不断移动即可,l左指针不断向右移动,r右指针不断向左移动,当l==r的时候退出,对于l后面的答案,就是大于1e8的,用答案减去即可,感觉这个题还是比较难的

D题

给定数组A[i],对于下面的式子

x,y,x=3y=14f(x,y)=314,x=1,y=100,f(x,y)=1100i=1Nj=i+1Nf(a[i],a[j])

n2105

a[i]109

这个题感觉比第三题简单,对于a[i],我们先计算出他的位数,比如说123是3位,那么对于j<i,a[j]j10,这部分可以使用前缀和,同时a[i]被算了i1次,加上即可,这就完了

ps:这个题一直错,因为我一直爆掉long long了,long long 最大的范围是1018,切记

posted @   xinyimama  阅读(11)  评论(0编辑  收藏  举报
相关博文:
·  ABC347
·  ABC352
·  ABC353
·  abc353
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示