下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择(当你的题目时限为1s的时候):

  1. n30n≤30, 指数级别, dfs+剪枝,状态压缩dp
  2. n100=>O(n3)n≤100 => O(n^{3}),floyd,dp,高斯消元
  3. n1000=>O(n2)O(n2logn)n≤1000 => O(n^{2}),O(n^{2}logn),dp,二分,朴素版Dijkstra、朴素版Prim、Bellman-Ford
  4. n10000=>O(nn)O(nn)n≤10000 => O(n∗\sqrt{n}),O(n∗n),块状链表、分块、莫队
  5. n100000=>O(nlogn)n≤100000 => O(nlogn) => 各种sort,线段树、树状数组、set/map、heap、拓扑排序、dijkstra+heap、prim+heap、Kruskal、spfa、求凸包、求半平面交、二分、CDQ分治、整体二分、后缀数组、树链剖分、动态树
  6. n1000000=>O(n)n≤1000000 => O(n), 以及常数较小的 O(nlogn)O(nlogn) 算法 => 单调队列、 hash、双指针扫描、并查集,kmp、AC自动机,常数比较小的 O(nlogn) 的做法:sort、树状数组、heap、dijkstra、spfa
  7. n10000000=>O(n)n≤10000000 => O(n),双指针扫描、kmp、AC自动机、线性筛素数
  8. n109=>O(n)n≤10^{9} => O(\sqrt{n}),判断质数
  9. n1018=>O(logn)n≤10^{18} => O(logn),最大公约数,快速幂,数位DP
  10. n101000=>O((logn)2)n≤10^{1000} => O((logn)^{2}),高精度加减乘除
  11. n10100000=>O(logk×loglogk)n≤10^{100000} => O(logk×loglogk),k表示位数,k表示位数,高精度加减、FFT/NTT

4 条评论

  • @ 2024-3-31 15:25:21

    ?

    • @ 2022-10-24 16:14:06

      qpzc

      👍 11
      🤣 4
      👎 4
      😄 3
      😕 3
      • @ 2022-10-24 16:14:04

        太好用了,好评!!!

        👍 11
        🤣 4
        👎 4
        😄 3
        😕 3
        • @ 2022-10-24 16:11:49

          qpzc

          👍 11
          🤣 4
          👎 4
          😄 3
          😕 3
          • 1