2019/5/18训练日记

     最近一直在刷洛谷上的题,做到2.1关了。这上面的题不算太难,就是比较麻烦,需要注意的细节有很多。像黑色星期五,坏掉的项链,这些题都挺麻烦的,项链这个题WA了好多次,我是枚举区间长度为n时向两边扩展做的,因为从数开始向左或向右,数的本身就是一个单位长度,所以在控制时要很细心才不会出错。在做题时也发现了很多的坑,对我来说算是坑吧,WA了好多次才注意到,就是在做回文素数时,数据量很大,10的8次方,遍历一遍能过,但是再加两个判断条件(是否为素数和是否回文)就超时。如果先判断回文在判断素数就不超时,因为判断素数的复杂度比判断回文的复杂度要高得多,就这个,一直超时,我和队友说,他们说肯定是要先判断回文,就我没注意到,,,,对我来说是个坑吧。类似的还有后面的等差数列,题意很明了,暴力枚举,一开始超时很严重,加了判断条件后就才200多秒,差距太大了,,,,以后还是要多多注意,优化代码。在做题时还扒了一个求一个数二进制时含有1的个数的模板,叫做平行算法:

int bitcount3(int n)
{
    n=(n&0x55555555)+((n>>1)&0x55555555);
    n=(n&0x33333333)+((n>>2)&0x33333333);
    n=(n&0x0f0f0f0f)+((n>>4)&0x0f0f0f0f);
    n=(n&0x00ff00ff)+((n>>8)&0x00ff00ff);
    n=(n&0x0000ffff)+((n>>16)&0x0000ffff);
    return n;
}

int型的最多计算5次就能算出来,虽然代码很丑陋,俺也没有具体看明白咋算的,总之很实用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值