zoukankan      html  css  js  c++  java
  • 一些必要的优化

    一、求找到某个数的所有素因子:

    自己的做法:使用一个vector,在筛素数的时候,将当前素数i,放入vec[j],其中j为i的倍数。这样如果询问很多,则是一个可行的方法。但是如果询问较少,空间和时间花费都会很大。

    优化做法:筛素数的时候,对于每个数,只需要记录它的最小(或最大)的素因子就行了。查询的时候,每次都除以当前数的最小的素因子,然后更新当前数,继续往下找。这样,就能找到所有的素因子了。这种方法对于询问次数较少的题目,将会比第一种做法快上很多。

    二、假如已知当前的一个二进制状态sta,求其所有子状态s1,s2使(s1&s2)==0 && (s1|s2)=sta。

    自己的做法:

    (1)dfs搜索。对于状态sta,若某一位i上为1,则枚举子状态s1的第i为为0或者为1。s2=sta^s1。搜出所有情况。

    (2)使用lowbit找出所有sta为1的位数,然后逐位枚举,跟搜索差不多,只是换成2进制枚举的写法。

    优化做法:直接贴代码好了i为sta,j为s1。

            for (int i = 1; i < (1 << (n - 1)); i++) {
                for (int j = i; j; j = (j - 1) & i) {
                    tot++;
                }
            }

     三、对于mod运算,能不用就不用。因为它带来的常数复杂度会有很大可能导致TLE。

  • 相关阅读:
    centos 7.5 snmp 安装
    centos 7.5 telnet 离线安装
    使用httpClient发送请求(支持https)
    kafka基本概念
    List根据时间字符串排序
    mac安装yosys遇到`dyld: malformed mach-o image`报错
    ctags的--exclude选项
    每周分享(3)
    实践OKR极易出现的四大误区
    从OKR小白到成功落地OKR(三)
  • 原文地址:https://www.cnblogs.com/CooCoo/p/3235208.html
Copyright © 2011-2022 走看看