POJ2886 (线段树)

题目链接

题意:有n个小朋友顺时针围着坐了一圈,每个人手里都有一个数字。游戏从第k个小朋友开始,首先,第k个小朋友退出游戏,如果退出游戏的小朋友手上的数字是正整数A,则从他的左手边的第A个小朋友退出游戏,如果退出游戏的小朋友手上的数字是负整数-A,则从他的右手边的第A个小朋友退出游戏(注意,因为顺时针,左手边就是往后,右手边就是往前)。第i个退出的小朋友可以获得a(i的约数的个数)的糖果,问最多糖果的小朋友的名字,并且他有多少糖果。

刚开始看这题题目的时候,哇。。看不懂。。最后求的东西不知道是什么,上网搜了一下大佬的题解,才知道,求的好像是翻素数。。。但是。。。重点在于。。我不会啊。。。所以还是老老实实初始化了一下,然后说这题是用线段树做,一直没懂线段树要怎么用上去,看了题解才明白。。。太菜了太菜了。。

思路:先初始化一下5e5+10每个数字的约数有几个(大佬就直接打表反素数。。),我们可以反过来想,可以用类似于素数打表的那个。接着用线段树去求每个小朋友的位置。这题线段树用的比较特殊(代码注释),在于修改的部分其它都差不多。

反素数:对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反素数。例如,整数1,2,4,6等都是反素数。

AC代码:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值